当我运行 go test
时,我的输出:
--- FAIL: TestGETSearchSuccess (0.00s)
Location: drivers_api_test.go:283
Error: Not equal: 200 (expected)
!= 204 (actual)
--- FAIL: TestGETCOSearchSuccess (0.00s)
Location: drivers_api_test.go:391
Error: Not equal: 200 (expected)
!= 204 (actual)
但是在我再次运行 go test
之后,我的所有测试都通过了。
仅当我重置我的 mysql 数据库,然后第一次运行 go test
时,测试才会失败。
对于每个 GET
请求,我都会先执行一个 POST
请求,以确保在数据库中创建了数据。
任何人都可以帮助我如何确保测试按顺序运行吗?那就是 POST
请求在 GET
请求之前运行?
最佳答案
您不能/不应该依赖测试执行顺序。未定义执行测试的顺序,并使用 testing flags可以将测试排除在运行之外,因此您根本无法保证它们会运行。
例如,以下命令将只运行名称包含 'W'
字母的测试:
go test -run W
另请注意,如果某些测试函数使用 T.Parallel()
标记自己符合并行执行条件方法,go 工具将重新排序测试以首先运行非并行测试,然后在某些情况下并行运行并行测试(由 -p
等测试标志控制)。你可以在这个答案中看到这样的例子:Are tests executed in parallel in Go or one by one?
测试之间应该独立。如果测试功能有先决条件,则无法在另一个测试功能中完成/实现。
在运行测试函数之前执行额外任务的选项:
- 你可以把它放在测试函数本身
- 您可以将它放在
_test.go
文件本身的包init()
函数中。这将在测试功能开始执行之前运行一次。 - 您可以选择实现
TestMain()
将首先调用的函数,您可以在调用M.Run()
之前在其中进行其他设置触发测试功能的执行。 - 您可以混合使用上述选项。
在你的包 init()
或 TestMain()
你应该检查你的数据库是否被初始化(插入了测试记录),如果没有,插入测试记录。
请注意,从 Go 1.7 开始,您可以使用子测试,您可以在其中定义子测试的执行顺序。有关详细信息,请参阅博客文章:Using Subtests and Sub-benchmarks , 和 testing
的包文档包。
关于testing - 如何按顺序运行 golang 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56734286/