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

标签 testing go

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

相关文章:

node.js - 如何使用webpack手动测试react组件?

amazon-web-services - 结合使用AWS Go SDK和配置文件

http - go 似乎不尊重持久连接设置

google-app-engine - Bitbucket Pipeline Deploy 问题到 Google App Engine

api - 当提供支持多个API规范的预生成链接时,Swagger UI不会加载规范

php - 有没有办法让 PHPUnit 确定 @method 声明的代码覆盖率?

testing - 如何模拟 Stripe 订阅续订失败?

c++ - 我如何使用 Google Test 在 main() 函数的特定位置调用特定的测试函数?

javascript - 如何在数组中的数组中的 Postman 中设置环境变量?

api - 获取 URL 时转到 header