TestMain没有运行

时间:2017-07-05 14:04:11

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

2 个答案:

答案 0 :(得分:4)

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

将该功能移至repository_test.go文件以解决此问题。

答案 1 :(得分:0)

确保将运行配置设置为“运行中的包不是文件”编辑配置... |去测试|配置的名称,这应该工作。如果没有,请发布IDE运行的命令以执行测试。