gpt4 book ai didi

testing - 如何按顺序运行 golang 测试?

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:27 24 4
gpt4 key购买 nike

当我运行 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/57545121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com