登录
首页 >  Golang >  Go问答

使 Go 测试彼此独立(全局变量的突变)

来源:stackoverflow

时间:2024-04-23 15:39:34 210浏览 收藏

积累知识,胜过积蓄金银!毕竟在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 测试彼此独立(全局变量的突变)》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>