(update 2023-07-18: 自分用メモとして公開)
Go のテスト一般論
- ランタイムにテストが最初から組み込まれている (
go test
) - 「assertion を使わず、Table Driven Test を実装する」のが基本戦略
- ではあるのだが、BDD (Behaviour Driven Development) したい人が多いので、Ginkgo (BDDフレームワーク) と Gomega (assertionライブラリ) も広く使われている
- Ginkgo で Table Driven Test することもできる (参考: GinkgoのDesrcibeTableの使い方 - Qiita)
Operator をテストするのに特有な事態
- 単体テストはともかく、統合テストは kube API Server がないと実行できない/さりとて実際に Kube をテストのたびに立てるのは(kindやminikubeといえども)負荷が大きい
- そこで Operator SDK が取っている戦略 は?
- controller-runtime が提供する envtest というツールで、Kube API Server と Etcd だけは立てる(scheduler はないので、まるきり kube そのものと同じ動きをする、というわけではない点に注意、例えば
Deployment
を作ってもそれに伴うPod
は生成されない) - Ginkgo/Gomega を使ったテストコードのテンプレートを自動生成してくれて、
make test
一発でテストできるような状態にしてくれる
- controller-runtime が提供する envtest というツールで、Kube API Server と Etcd だけは立てる(scheduler はないので、まるきり kube そのものと同じ動きをする、というわけではない点に注意、例えば