一尘不染

如何使用 Go 中的测试包进行测试设置

go

在使用测试包时,如何进行整体测试设置处理,为所有测试设置阶段?

作为一个例子,在 Nunit 中有一个[SetUp]属性。

[TestFixture]
public class SuccessTests
{
  [SetUp] public void Init()
  { /* Load test data */ }
}

阅读 184

收藏
2021-11-16

共1个答案

一尘不染

从 Go 1.4 开始,您可以实现设置/拆卸(无需在每次测试之前/之后复制您的功能)。该文档概括这里主要部分:

TestMain 运行在主 goroutine 中,并且可以围绕对 m.Run 的调用进行任何必要的设置和拆卸。然后它应该使用 m.Run 的结果调用 os.Exit

我花了一些时间才弄清楚这意味着如果测试包含一个函数,func TestMain(m *testing.M)那么将调用该函数而不是运行测试。在这个函数中,我可以定义测试将如何运行。例如我可以实现全局设置和拆卸:

golang func TestMain(m *testing.M) { setup() code := m.Run() shutdown() os.Exit(code) }

可以在此处找到其他一些示例。

在最新版本中添加到 Go 测试框架的 TestMain 功能是几个测试用例的简单解决方案。TestMain 提供了一个全局钩子来执行设置和关闭,控制测试环境,在子进程中运行不同的代码,或检查测试代码泄漏的资源。大多数包不需要 TestMain,但在需要时它是一个受欢迎的补充。

2021-11-16