适用于所有测试的Golang全局设置(在同一子模块和其他子模块中)。

时间:2018-06-25 14:54:11

标签: go

我通常尝试为CI / CD管道运行命令go test ./...,该管道用于运行所有子目录中的所有测试用例。

但是我最近将代码重构为从标志解析中获取配置文件路径,然后读取并初始化所有变量(在服务器启动之前需要)。此更改需要从中删除所有初始化代码 init function -> custom function,它将从main调用。

现在一切都已完成,但是所有测试用例均无法正常工作,因为我需要从某个地方调用所有自定义函数。

我尝试使用TestMain功能,但我认为它仅适用于同一模块,并且所有测试用例均失败。

func TestMain(m *testing.M) { 
    mySetupFunction()
    retCode := m.Run()
    myTeardownFunction()
    os.Exit(retCode)
}

需要帮助来了解如何创建全局测试设置,或者想知道是否还有其他更好的方法来进行上述重构。

我的模块结构如下

A
    B
    C
    D
        E
            F
        G
            H
    I
main.go 

其中父模块是A,其中包含main.go,而其他模块则嵌套在更深的层次上,并且所有模块都有自己的测试用例

1 个答案:

答案 0 :(得分:0)

如果您来自 init 函数,您总是可以制作一个测试包,其中包含您希望为单元测试运行的 init 代码,并导入它以产生副作用。

将 pkg 命名为 initializetest,实现 init() 函数,然后在所有测试文件中,像这样导入它:

import (
  _ "project/path/initializetest"
)

我不完全喜欢这个,因为 init() 副作用可能很难调试。为每个单元测试显式调用设置会更好。