繁体   English   中英

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

[英]Golang global setup for all tests (within same and other sub modules).

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

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

现在一切都完成了,但所有测试用例都不起作用,因为我需要从某个地方调用所有自定义函数。

我尝试使用 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 和其他各种模块,其中一些嵌套在深层,它们都有自己的测试用例

如果你来自一个init函数,你总是可以创建一个测试包,其中包含你想为你的单元测试运行的init代码,并导入它以获得副作用。

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

import (
  _ "project/path/initializetest"
)

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

看看这个 我相信您正在寻找的是func TestMain(m *testing.M)

它基本上是设置/拆卸方法。 Go 在该方法的“内部”执行测试。 所以你只需要设置它。 您不必在测试中调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM