我有一个测试包,它测试一些依赖于读取配置的东西。我想在运行所有测试之前读取该配置一次,所以我尝试使用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)
那么它只会为包运行一次,这就是我应该编写任何设置或拆卸代码的地方。