2 回答

TA贡献1784条经验 获得超9个赞
首先,关于这一点:
另外作为旁注,我应该更改main_test.go的名称。我只是这么称呼它,因为main是标准的入口点。
我认为将其命名为main_test.go令人困惑,因为它可能表明您正在测试此文件中的main函数(根据惯例)golang
其次,关于这一点:
但是,一旦我使用 build 标记,database_integration_test.go 文件就看不到初始化的数据库类型。我该如何阻止这种情况?
生成约束(也称为生成标记)用于在生成过程中包含或排除包中的文件。有了这个,我们可以从相同的源代码构建不同类型的构建。
因此,如果您没有看到数据库类型初始化,则很可能数据库类型的定义和集成测试使用不同的构建标记进行标记。确保它们存在于相同的生成标记中。另外,我认为您可以使用多个构建标记来标记文件。所以你也可以尝试一下。
有关构建标签的更多详细信息,请查看Dave Cheney的以下文章

TA贡献1875条经验 获得超3个赞
您可以简单地将标志添加到您的:TestMain
var isIntegration bool
func init() {
flag.StringVar(&isIntegration, "mytest.integration", "Set flag to set up DB for integration tests")
}
func TestMain(t *testing.M) {
SetUpDatabase(isIntegration)
//etc...
}
然后,只需根据参数是否为 或 来让调用不同的、未导出的函数即可。这将是获取行为的快速方法,而不必过多地使用自定义构建约束。特别是考虑到您正在运行测试,而不是像这样构建应用程序。SetUpDatabasetruefalse
就重命名而言:我不明白为什么你需要改变它。它按照它在锡上所说的去做。当其他人想要查看测试的结构/运行方式,或者添加了哪些可能的标志时,只需检查目录并查找文件(以及 ,这将是我查找的第一个文件)要容易得多。任何其他名称,如 、 、 、 ...只会把水搅浑。main_test.gomain_test.goinit.gosetup_integration_test.gointegration_setup_test.gointegration_start_test.go
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报