我通常尝试运行go test ./...CI/CD 管道的命令,该命令用于在所有子目录中运行所有测试用例。
但我最近重构了我的代码以从标志解析中获取配置文件路径,然后读取和初始化所有变量(在服务器启动之前需要)。此更改需要删除init function -> custom function将从主调用的所有初始化代码
。
现在一切都已完成,但所有测试用例都不起作用,因为我需要从某个地方调用所有自定义函数。
我尝试使用 TestMain 功能,但我认为它仅适用于同一个模块,并且所有测试用例都失败了。
func TestMain(m *testing.M) {
mySetupFunction()
retCode := m.Run()
myTeardownFunction()
os.Exit(retCode)
}
Run Code Online (Sandbox Code Playgroud)
需要帮助以了解如何创建全局测试设置或想知道是否有其他更好的方法进行上述重构。
我的模块结构如下
A
B
C
D
E
F
G
H
I
main.go
Run Code Online (Sandbox Code Playgroud)
其中父模块是 A,其中包含 main.go 和其他各种模块,它们嵌套在深层,并且所有模块都有自己的测试用例
如果您来自init函数,则始终可以创建一个测试包,其中包含init您想要为单元测试运行的代码,并导入该代码以消除副作用。
让 pkg 被调用initializetest,实现该init()函数,然后在所有测试文件中,像这样导入它:
import (
_ "project/path/initializetest"
)
Run Code Online (Sandbox Code Playgroud)
我不太喜欢这个,因为 init() 的副作用可能会导致调试很痛苦。为每个单元测试显式调用设置会更好。