Go TestMain未运行
我在go中有一个测试包,它测试一些依赖于读取配置的东西。我想在运行所有测试之前阅读一次配置,所以我尝试使用Go TestMain未运行,go,goland,Go,Goland,我在go中有一个测试包,它测试一些依赖于读取配置的东西。我想在运行所有测试之前阅读一次配置,所以我尝试使用TestMain(m*testing.m): main.go: package tests import ( ... ) var logger = logging.MustGetLogger("tests") func TestMain(m *testing.M) { logger.Info("Initializing test suite") viper.S
TestMain(m*testing.m)
:
main.go:
package tests
import (
...
)
var logger = logging.MustGetLogger("tests")
func TestMain(m *testing.M) {
logger.Info("Initializing test suite")
viper.SetConfigName("config")
viper.AddConfigPath("..\\..\\")
err := viper.ReadInConfig()
if err == nil {
os.Exit(m.Run())
} else {
logger.Fatal("Could not read configuration")
}
}
我在同一个目录(和包)中有另一个文件和一个测试
存储库_test.go:
package tests
import (
...
)
func TestCreation(t *testing.T) {
aa := myModule.CreateRepository()
assert.NotNil(t, aa)
}
我的问题是测试失败,因为没有从文件中读取配置。当我尝试在Gogland中调试测试时,TestMain
中的断点未被命中。当我从命令行运行测试时,我看不到来自TestMain
的任何打印输出
有什么特别的事情我应该做,使它的工作?从我在线阅读的内容中,我了解到,如果我定义了
TestMain(m*testing.m)
,那么它只会为包运行一次,这就是我应该编写任何设置或拆卸代码的地方。确保运行配置在运行|编辑配置…|去测试一下你的配置的名称,这应该会起作用。如果没有,请发布IDE运行以执行测试的命令。仅在测试文件中执行(后缀\u test.go
)
将函数移动到repository_test.go文件以修复此问题。谢谢。我现在不在我的电脑旁。我稍后会试试这个。但是从命令行运行呢?我也需要这个在TeamCity工作。在TeamCity上,我们使用'go test-v path/tests',这是运行特定文件和包(或目录)之间的区别。在TeamCity中,除非手动指定所有文件,否则该路径看起来像一个目录/包。如果指定了单个文件,Go将仅在该文件中运行测试函数。请告诉我配置更改是否有帮助。测试套件中的所有文件(包括定义
TestMain
的文件)必须以*\u test.go
结尾。将其重命名为例如main\u test.go
@putu omg!一定是这样。我现在觉得自己像个白痴。我一靠近电脑就会检查!是的,的确如此。好吧,至少现在我确信这不会再发生在我身上了。