使 Go 测试彼此独立(全局变量的突变)

鉴于我运行以下测试:


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,比如我还没有找到的标志?


哔哔one
浏览 104回答 1
1回答

莫回无

如果您需要在测试用例之后运行 clean up,您可以使用t.Cleanup.package main_testimport (    "testing")const Default = "default"const SomethingElse = "something else"var someVar = Defaultfunc 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go