TL;DR
Bill Wake が見いだした、すべてのテストの基本パターン。テストを Arrange(準備)、Act(実行)、Assert(検証)の 3 段階で書く。AAA はその頭文字である。
仕組み
- Arrange(準備): テストを書くときに最初に行うのは、テストするデータの準備である。システムをテストが実行できる状態にする。
setup関数やテスト関数の冒頭で行う。 - Act(実行): 次に、テストの対象を実行する。対象の関数の呼び出し、アクションの実行、プロシージャの呼び出しなどがこれに当たる。
- Assert(検証): 最後に、実行の出力を調べ、システムが望ましい状態になっていることを確かめる。
例
Go でボウリングのスコアを計算するテストを書くと、次のようになる。
func TestScore(t *testing.T) {
tests := []struct {
name string
expected int
setup func(*Game)
}{
{
name: "Threw 20 times and knocked down 0 pins.",
expected: 0,
setup: func(g *Game) {
rollMany(g, 20, 0)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := NewGame()
// Arrange
tt.setup(g)
// Act
act := g.Score()
// Assert
assert.Equal(t, act, tt.expected)
})
}
}