【发布时间】:2020-05-13 09:40:04
【问题描述】:
在 Go 中,如果其中一个测试失败,有没有办法提前中止一组测试?
我正在使用 stretchr/testify 套件,但这只是建立在基本的 go testing 功能之上。
我考虑过的一些选项:
- 我查看了设置 testing.failFast 但它没有导出。
- 不推荐使用 os.Exit(),因为它可能会弄乱测试输出等等。
- 在第一次失败时停止是不够的,因为第一次失败可能不在关键测试中
我可以添加自己的标志,然后添加到每个测试中:
if criticalTestFailed {
t.skipTest()
}
但这是添加到每个测试中的重复且烦人的样板。我想要的是这样的:
func (suite *MySuite) TestCritcalTest() {
t := MySuite.T()
defer func() {
if t.Failed() {
MySuite.SkipRemainingTests() //does not exist
}
}()
// some tests here...
}
这里有一个常见的做法吗?
【问题讨论】:
-
这能回答你的问题吗? Stop on first test failure with `go test`
-
或者您只希望它用于特定测试?
-
这无济于事,因为第一个失败的测试不一定是关键测试。
-
panic()可能比os.Exit()更好,因为至少运行了延迟函数。我原以为测试会在测试恐慌后继续进行,但在我做的测试中似乎没有。 -
你可以使用
FailNow