我通常尝试为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,而其他模块则嵌套在更深的层次上,并且所有模块都有自己的测试用例
答案 0 :(得分:0)
如果您来自 init
函数,您总是可以制作一个测试包,其中包含您希望为单元测试运行的 init
代码,并导入它以产生副作用。
将 pkg 命名为 initializetest
,实现 init()
函数,然后在所有测试文件中,像这样导入它:
import (
_ "project/path/initializetest"
)
我不完全喜欢这个,因为 init() 副作用可能很难调试。为每个单元测试显式调用设置会更好。