小编典典

如何依次运行golang测试?

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请求之前运行?


阅读 475

收藏
2020-07-02

共1个答案

小编典典

您不能/不应该依赖测试执行顺序。没有定义测试的执行顺序,并且使用测试标志可以排除测试的运行,因此您无法保证它们将完全运行。

例如,以下命令将仅运行名称包含'W'字母的测试:

go test -run W

还要注意,如果某些测试函数使用该T.Parallel()方法将自己标记为可以并行执行,则go工具将对测试重新排序以首先运行非并行测试,然后在某些情况下(由测试标记控制-p)并行运行并行测试。

测试应相互 独立 。如果一个测试功能具有先决条件,则不能在另一个测试功能中完成/实现。

在运行测试功能之前执行其他任务的选项:

  • 您可以将其放在测试功能本身中
  • 您可以将其放在文件本身的包init()函数中_test.go。这将在执行测试功能之前运行一次。
  • 您可以选择实现一个TestMain()函数,该函数将首先被调用,并且在其中您可以在调用M.Run()触发测试功能的执行之前进行其他设置。
  • 您可以混合使用以上选项。

在包你的情况init()TestMain()你应该检查,如果你的数据库初始化(有插入的测试记录),如果没有,将测试记录。

请注意,从Go
1.7开始,您可以使用子测试,在其中定义子测试的执行顺序。有关详细信息,请参阅博客文章:使用子测试和子基准,以及软件包的软件包文档testing

2020-07-02