我在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.SetConfigName("config")
viper.AddConfigPath("..\\..\\")
err := viper.ReadInConfig()
if err == nil {
os.Exit(m.Run())
} else {
logger.Fatal("Could not read configuration")
}
}
我在同一目录(和包)中有另一个文件,带有测试。
repository_test.go:
package tests
import (
...
)
func TestCreation(t *testing.T) {
aa := myModule.CreateRepository()
assert.NotNil(t, aa)
}
我的问题是测试失败,因为没有从文件中读取配置。当我尝试在Gogland中调试测试时,TestMain
内的断点未被击中。当我从命令行运行测试时,我看不到来自TestMain
的任何打印输出。
我应该做些什么来让它起作用吗?从我在线阅读的内容中我了解到,如果我定义TestMain(m *testing.M)
,那么它将只运行一次包,这就是我应该编写任何设置或拆卸代码的地方。
答案 0 :(得分:4)
TestMain仅在测试文件中执行(后缀_test.go
)。
将该功能移至repository_test.go文件以解决此问题。
答案 1 :(得分:0)
确保将运行配置设置为“运行中的包不是文件”编辑配置... |去测试|配置的名称,这应该工作。如果没有,请发布IDE运行的命令以执行测试。