当前位置: > > > > 使 Go 测试彼此独立(全局变量的突变)
使 Go 测试彼此独立(全局变量的突变)
来源:stackoverflow
2024-04-23 15:39:34
0浏览
收藏
积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《使 Go 测试彼此独立(全局变量的突变)》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容
假设我运行了以下测试:
const unchanged = "unchanged"
var myField = unchanged
func TestChangeField1(t *testing.T) {
if myField != unchanged {
t.FailNow()
}
myField = "changed"
}
func TestChangeField2(t *testing.T) {
if myField != unchanged {
t.FailNow()
}
myField = "changed"
}
第二个测试将失败,因为变量已在另一个测试中更改。
我知道有一些解决方法,例如使用测试套件,该套件提供挂钩来将此值重置为测试之间的初始状态。但首先这意味着一些开销,其次我觉得整个行为令人惊讶,所以我不能真正确定我的项目中的每个人都记住并遵守这一点。
go test 是否有更直接的解决方案,例如我尚未找到的标志?
解决方案
@jimb 在评论中提到了这一点,但如果您需要在测试用例后运行清理,您可以使用 t.cleanup 注册每次测试后运行的函数。
package main_test
import (
"testing"
)
const Default = "default"
const SomethingElse = "something else"
var someVar = Default
func TestOne(t *testing.T) {
t.Cleanup(resetState)
if someVar != Default {
t.FailNow()
}
someVar = SomethingElse
}
func TestTwo(t *testing.T) {
t.Cleanup(resetState)
if someVar != Default {
t.FailNow()
}
someVar = SomethingElse
}
func resetState() {
someVar = Default
}
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使 Go 测试彼此独立(全局变量的突变)》文章吧,也可关注米云公众号了解相关技术文章。
