assert
かrequire
か。
どちらも同じに見えるが、動きが少し異なる。
結論から言うと、
-
assert
は途中でFailしてもテストは続行するが、 -
require
は途中でFailしたらそこでテスト関数を抜ける。
require
は、テストに必要な前提条件などの確認で使い、
assert
は目的のテストのために使うとよさそう。
使い分けの例:
Foo()
をテストしたいが、Foo()
を実行するためにフォルダが必要な場合。
func TestFoo(t *testing.T) {
err := mkFooDir()
require.NoError(t, err)
actual := Foo()
assert.Equal(t, fooExpected(), actual)
}
サンプルコード
package main
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFoo(t *testing.T) {
assert.Equal(t, 123, 123) // pass
assert.Equal(t, 123, 321) // fail
assert.Fail(t, "failed") // fail
}
func TestBar(t *testing.T) {
require.Equal(t, 123, 123) // pass
require.Equal(t, 123, 321) // fail, and finish testing
require.Fail(t, "failed") // will be skipped.
}
Output:
=== RUN TestFoo
prog.go:12:
Error Trace: prog.go:12
Error: Not equal:
expected: 123
actual : 321
Test: TestFoo
prog.go:13:
Error Trace: prog.go:13
Error: failed
Test: TestFoo
--- FAIL: TestFoo (0.00s)
=== RUN TestBar
prog.go:19:
Error Trace: prog.go:19
Error: Not equal:
expected: 123
actual : 321
Test: TestBar
--- FAIL: TestBar (0.00s)
FAIL
参考URL:
https://www.yellowduck.be/posts/assert-vs-require-in-testify/