鉴于我运行了以下测试:
const unchanged = "unchanged"
var myField = unchanged
func TestChangeField1(t *testing.T) {
if myField != unchanged {
t.FailNow()
}
myField = "changed"
}
func TestChangeField2(t *testing.T) {
if myField != unchanged {
t.FailNow()
}
myField = "changed"
}
第二项测试将失败,因为该变量已在另一项测试中更改。
我知道有一些变通办法,例如使用测试套件,该套件提供了将这些值重置为测试之间初始状态的钩子。但是首先这意味着一些开销,其次我觉得整个行为令人惊讶,因此我不能确定项目中的每个人都能记住并遵守。
go test
是否有更直接的解决方案,就像我尚未找到的标志一样?
答案 0 :(得分:2)
@JimB在评论中提到了这一点,但是如果您需要在测试用例之后运行清理,则可以使用t.Cleanup
注册在每次测试之后运行的函数。
package main_test
import (
"testing"
)
const Default = "default"
const SomethingElse = "something else"
var someVar = Default
func TestOne(t *testing.T) {
t.Cleanup(resetState)
if someVar != Default {
t.FailNow()
}
someVar = SomethingElse
}
func TestTwo(t *testing.T) {
t.Cleanup(resetState)
if someVar != Default {
t.FailNow()
}
someVar = SomethingElse
}
func resetState() {
someVar = Default
}