testify の assert.NoError() で fail した場合に処理続行して panic しないために
忙しい人のための結論
assert.NoError()
で failした際には t.FailNow()
すべし
Why
goのテストコード書く場合いちいち if err != nil
でチェックするのが面倒なのでtestifyの assert.NoError()
を使ってチェックすることがあると思います。
t.Run("hoge func1", func(t *testing.T) {
hoge := NewHoge()
result, err := hoge.func1() // return (interface{}, error)
assert.NoError(t, err)
actual := result.(*Hoge)
expected := &Hoge{Hoge: "hoge"}
assert.Equal(t, expected, actual)
})
上記のテストコードはassertが通っている場合は問題なく動作しますが
assertがfailした場合 assert.NoError
で処理が止まらずにresult.(*Hoge)
で panic したりします。
どちらにせよ失敗しているのでtest的には問題ないですが、test内でpanicするとfailの原因探るのが面倒です。
What
assert.NoError
は assertにfailした際に戻り値(bool)にfalseを返すので
falseの場合は t.FailNow()
を呼んでtestを中断してあげます。
t.Run("hoge func1", func(t *testing.T) {
hoge := NewHoge()
result, err := hoge.func1() // return (interface{}, error)
if !assert.NoError(t, err) {
t.FailNow()
}
actual := result.(*Hoge)
expected := &Hoge{Hoge: "hoge"}
assert.Equal(t, expected, actual)
})
testにfailした際、上手い具合に目的のErrorだけ吐いて止まってくれます。
結局 if err != nil
的になってしまうのがどうもイケてない。
どうにかならんもんか。
Author And Source
この問題について(testify の assert.NoError() で fail した場合に処理続行して panic しないために), 我々は、より多くの情報をここで見つけました https://qiita.com/tomtwinkle/items/0c0e79d10bf69ab8fd95著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .