タダです.
先日会社のブログを書きました.この取り組みの記事で ALTER TABLE 文に ALGORITHM 句を明示しないとエラーを返す CI について書いたのですが,SQL 解析のコードと合わせてテストコードを一緒に書きました.その際にテーブル駆動テストを初めてやったので振り返りで学んだことをまとめます.
直近行っている、チームの取り組みについて書きました!https://t.co/VDAdfIBEH7
— Sadayoshi Tada / taddy (@taddy_919) February 20, 2025
テーブル駆動テストとは
テーブル駆動テストは複数のテストケースを効率的に記述し実行するための手法です.この手法ではテストケースを構造体やスライスで定義し,それを反復処理してテストを行います.例えば,以下は数値を加算するだけの関数とそれをテストするコードです.標準パッケージで当該関数に対するテストデータを明示して,テストが実行できるためどんなケースでコードが動作するのかの確認がしやすいと感じました.
テスト対象コード
package main func Sum(a, b int) int { return a + b }
テストコード
package main import "testing" func TestSum(t *testing.T) { testCases := map[string]struct { caseName string input1 int input2 int expected int }{ "1 + 2 = 3": {caseName: "1 + 2 = 3", input1: 1, input2: 2, expected: 3}, "0 + 0 = 0": {caseName: "0 + 0 = 0", input1: 0, input2: 0, expected: 0}, } for caseName, tc := range testCases { t.Run(caseName, func(t *testing.T) { result := Sum(tc.input1, tc.input2) if result != tc.expected { t.Errorf("got %d, want %d", result, tc.expected) } }) } }
テストコードの実行
$ go test -v === RUN TestSum === RUN TestSum/1_+_2_=_3 === RUN TestSum/0_+_0_=_0 --- PASS: TestSum (0.00s) --- PASS: TestSum/1_+_2_=_3 (0.00s) --- PASS: TestSum/0_+_0_=_0 (0.00s) PASS ok xxx/xxx/xxx/sample 0.454s
まとめ
Go のテーブル駆動テストにはじめて触れたので備忘録でまとめました.初めて取り組んでみてもどんなテストケースなのか,どんな挙動になるのかがわかりやすくなるなと感じました.