
php小编鱼仔将为大家介绍如何让一个实例对象在所有测试中可供使用。在进行单元测试时,我们常常需要创建一个实例对象,并在多个测试用例中重复使用。为了避免重复创建对象的麻烦,我们可以通过使用setUp()方法,在测试开始前创建实例对象,并将其保存为类的属性。这样,我们就可以在所有测试方法中都能够访问到这个实例对象,从而提高代码的复用性和测试效率。接下来,让我们一起来看具体的实现方法。
问题内容
我正在为 http 服务编写组件测试。我有一个测试运行程序类,其中包含一些有用的结构和共享函数(主要是“进行 http 调用”和“比较 json 结构”)。该测试运行器类需要具有从 envvars 中提取的用于发送 http 调用的域。我不想每次进行 http 调用时都从环境变量中获取域,而是更愿意解析一次并将其设置在测试运行器类的实例中,然后让该实例可用于我的所有测试函数。
假设测试函数的预期签名是 func TestXxx(t *testing.T) {...} 我怎样才能使这个实例可用于我的测试?
代码:
dmSOBC SHOP网店系统由北京时代胜腾信息技术有限公司(http://www.webzhan.com)历时6个月开发完成,本着简单实用的理念,商城在功能上摒弃了外在装饰的一些辅助功能,尽可能的精简各项模块开发,做到有用的才开发,网店V1.0.0版本开发完成后得到了很多用户的使用并获得了好评,公司立即对网店进行升级,其中包括修正客户提出的一些意见和建议,现对广大用户提供免费试用版本,如您在使用
- 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)
}









