首页  >  文章  >  后端开发  >  如何让一个实例对象可供所有测试使用?

如何让一个实例对象可供所有测试使用?

PHPz
PHPz转载
2024-02-15 17:27:111065浏览

如何让一个实例对象可供所有测试使用?

php小编鱼仔将为大家介绍如何让一个实例对象在所有测试中可供使用。在进行单元测试时,我们常常需要创建一个实例对象,并在多个测试用例中重复使用。为了避免重复创建对象的麻烦,我们可以通过使用setUp()方法,在测试开始前创建实例对象,并将其保存为类的属性。这样,我们就可以在所有测试方法中都能够访问到这个实例对象,从而提高代码的复用性和测试效率。接下来,让我们一起来看具体的实现方法。

问题内容

我正在为 http 服务编写组件测试。我有一个测试运行程序类,其中包含一些有用的结构和共享函数(主要是“进行 http 调用”和“比较 json 结构”)。该测试运行器类需要具有从 envvars 中提取的用于发送 http 调用的域。我不想每次进行 http 调用时都从环境变量中获取域,而是更愿意解析一次并将其设置在测试运行器类的实例中,然后让该实例可用于我的所有测试函数。

假设测试函数的预期签名是 func TestXxx(t *testing.T) {...} 我怎样才能使这个实例可用于我的测试?

代码:

  • main.go - 使用 TestMain 从 envvars 获取域并创建测试运行器类的实例
  • testrunner.go - 使 http 调用和验证结果更容易的帮助程序类
  • tests.go - 正在运行的实际测试。我正在将它们转换为使用 golang 的测试库,但您可以看到当前它们需要一个参数(测试运行器实例)

解决方法

使用包级变量来存储值。初始化访问器函数中的值。使用sync.Once确保初始化完成一次。

type Helper struct {
    message string
}

var (
    helper     *Helper
    helperOnce sync.Once
)

func getHelper() *Helper {
    helperOnce.Do(func() {
        helper = &Helper{"Hello"}
    })
    return helper
}

func TestFirst(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

func TestSecond(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

https://www.php.cn/link/50d758cc9ab8bb51177b071d370caac2

以上是如何让一个实例对象可供所有测试使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除