Go TestMain未运行

Go TestMain未运行,go,goland,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.S

我在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")
    }
}
我在同一个目录(和包)中有另一个文件和一个测试

存储库_test.go:

package tests

import (
    ...
)

func TestCreation(t *testing.T) {
    aa := myModule.CreateRepository()
    assert.NotNil(t, aa)
}
我的问题是测试失败,因为没有从文件中读取配置。当我尝试在Gogland中调试测试时,
TestMain
中的断点未被命中。当我从命令行运行测试时,我看不到来自
TestMain
的任何打印输出


有什么特别的事情我应该做,使它的工作?从我在线阅读的内容中,我了解到,如果我定义了
TestMain(m*testing.m)
,那么它只会为包运行一次,这就是我应该编写任何设置或拆卸代码的地方。

确保运行配置在运行|编辑配置…|去测试一下你的配置的名称,这应该会起作用。如果没有,请发布IDE运行以执行测试的命令。

仅在测试文件中执行(后缀
\u test.go


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

谢谢。我现在不在我的电脑旁。我稍后会试试这个。但是从命令行运行呢?我也需要这个在TeamCity工作。在TeamCity上,我们使用'go test-v path/tests',这是运行特定文件和包(或目录)之间的区别。在TeamCity中,除非手动指定所有文件,否则该路径看起来像一个目录/包。如果指定了单个文件,Go将仅在该文件中运行测试函数。请告诉我配置更改是否有帮助。测试套件中的所有文件(包括定义
TestMain
的文件)必须以
*\u test.go
结尾。将其重命名为例如
main\u test.go
@putu omg!一定是这样。我现在觉得自己像个白痴。我一靠近电脑就会检查!是的,的确如此。好吧,至少现在我确信这不会再发生在我身上了。