在使用测试包时,如何进行整体测试设置处理,为所有测试设置阶段?
作为一个例子,在 Nunit 中有一个[SetUp]属性。
[SetUp]
[TestFixture] public class SuccessTests { [SetUp] public void Init() { /* Load test data */ } }
从 Go 1.4 开始,您可以实现设置/拆卸(无需在每次测试之前/之后复制您的功能)。该文档概括这里的主要部分:
TestMain 运行在主 goroutine 中,并且可以围绕对 m.Run 的调用进行任何必要的设置和拆卸。然后它应该使用 m.Run 的结果调用 os.Exit
我花了一些时间才弄清楚这意味着如果测试包含一个函数,func TestMain(m *testing.M)那么将调用该函数而不是运行测试。在这个函数中,我可以定义测试将如何运行。例如我可以实现全局设置和拆卸:
func TestMain(m *testing.M)
golang func TestMain(m *testing.M) { setup() code := m.Run() shutdown() os.Exit(code) }
可以在此处找到其他一些示例。
在最新版本中添加到 Go 测试框架的 TestMain 功能是几个测试用例的简单解决方案。TestMain 提供了一个全局钩子来执行设置和关闭,控制测试环境,在子进程中运行不同的代码,或检查测试代码泄漏的资源。大多数包不需要 TestMain,但在需要时它是一个受欢迎的补充。