2

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

4

2 回答 2

7

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

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

于 2017-07-05T18:56:13.913 回答
0

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

于 2017-07-05T14:13:35.673 回答