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

2024年 2月 15日 77.3k 0

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

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

以上就是如何让一个实例对象可供所有测试使用?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论