英文:
TestMain not run
问题
我有一个在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)
,那么它将只运行一次,用于编写任何设置或拆卸代码的地方。
英文:
I have a test package in go which tests some stuff that depend on reading a configuration. I want to read that configuration once before running all tests so I'm trying to use 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")
}
}
And I have another file in the same directory (and package) with a test.
repository_test.go:
package tests
import (
...
)
func TestCreation(t *testing.T) {
aa := myModule.CreateRepository()
assert.NotNil(t, aa)
}
My problem is that the test fails because the configuration is not read from the file. When I try to debug the test in Gogland a breakpoint inside TestMain
is not hit. When I run the tests from command line I don't see any printouts from TestMain
.
Is there something special I should do to make it work? From what I read online I understood that if I define TestMain(m *testing.M)
then it's going to run just once for the package and that's where I'm supposed to write any setup or teardown code.
答案1
得分: 9
TestMain 只会在测试文件(后缀为 _test.go
)中执行。
将该函数移动到 repository_test.go
文件中以修复此问题。
英文:
TestMain is only executed in test files (suffix _test.go
).
Move the function to the repository_test.go file to fix this.
答案2
得分: 0
请确保运行配置设置为“包”而不是“文件”,在“运行 | 编辑配置... | Go Test | 您的配置名称”中进行设置,这样应该可以正常工作。如果不行,请发布IDE运行执行测试的命令。
英文:
Make sure that the run configuration is set to Package not File in Run | Edit Configurations... | Go Test | Name of your configuration and this should work. If it doesn't, please post the commands the IDE runs to execute the tests.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论