我已经为 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 {} \;
3 回答
倚天杖
TA贡献1828条经验 获得超3个赞
提供 go 工具是为了使用 *_test.go 文件在其中包含单元测试的约定使运行单元测试更容易。因为它假定它们是单元测试,所以它也假定它们是密封的。听起来你的测试要么不是单元测试,要么它们违反了单元测试应该满足的假设。
如果您的意思是这些测试是单元测试,那么您可能需要一个用于单元测试的模拟数据库。数据库的模拟(最好在内存中)将确保单元测试是密封的,并且不会受到其他单元测试的干扰。
如果您的意思是这些测试是集成测试,那么最好不要使用 go 工具进行这些测试。您可能想要的是创建一个单独的测试二进制文件,您可以控制其运行并在其中编写集成测试脚本。
好消息是在 Go 中创建一个模拟是非常容易的。更改您的代码以使用您关心的数据库方法的接口,然后编写该接口的内存实现以进行测试,并将其传递到您要测试的应用程序代码中。
- 3 回答
- 0 关注
- 287 浏览
添加回答
举报
0/150
提交
取消