猿问

包测试的串行执行

我已经为 Web API 实现了几个包,每个包都有自己的测试用例。当使用go test ./api/pkgname测试通过测试每个包时。如果我想一次运行所有测试,go test ./api/...测试用例总是失败。

在每个测试用例中,我使用DROP SCHEMA public CASCADE后跟CREATE SCHEMA public并应用所有迁移重新创建整个模式。测试套件随机报告错误,说关系/表不存在,所以我猜每个测试套件(每个包)以某种方式并行运行,从而弄乱了数据库状态。

我试图传递一些测试标志go test -cpu 1 -parallel 0 ./src/api/...,但没有成功。

这里的问题可能是并行运行的测试,如果是,我如何强制串行执行?

更新:

目前我使用这个解决方法来运行测试,但我仍然想知道是否有更好的解决方案

find <dir> -type d -exec go test {} \;


茅侃侃
浏览 288回答 3
3回答

倚天杖

提供 go 工具是为了使用 *_test.go 文件在其中包含单元测试的约定使运行单元测试更容易。因为它假定它们是单元测试,所以它也假定它们是密封的。听起来你的测试要么不是单元测试,要么它们违反了单元测试应该满足的假设。如果您的意思是这些测试是单元测试,那么您可能需要一个用于单元测试的模拟数据库。数据库的模拟(最好在内存中)将确保单元测试是密封的,并且不会受到其他单元测试的干扰。如果您的意思是这些测试是集成测试,那么最好不要使用 go 工具进行这些测试。您可能想要的是创建一个单独的测试二进制文件,您可以控制其运行并在其中编写集成测试脚本。好消息是在 Go 中创建一个模拟是非常容易的。更改您的代码以使用您关心的数据库方法的接口,然后编写该接口的内存实现以进行测试,并将其传递到您要测试的应用程序代码中。
随时随地看视频慕课网APP

相关分类

Go
我要回答