TestMain 不是 运行

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) 那么它只会为包 运行 一次,这就是我应该编写任何设置或拆卸代码的地方。

确保运行 配置设置为Package not File in 运行 |编辑配置... |去测试 |您的配置名称,这应该可以工作。如果没有,请 post 命令 IDE 运行 执行测试。

TestMain只在测试文件中执行(后缀_test.go)。

将函数移动到 repository_test.go 文件以解决此问题。