英文:
setting a variable from test file in golang
问题
我正在尝试从我的单元测试文件main_test.go中设置一个变量。
main_test.go
var testingMode bool = true
main.go
if testingMode == true {
//使用测试数据库
} else {
//使用常规数据库
}
如果我运行"go test",这个方法可以正常工作。如果我运行"go build",Golang会报错说testingMode未定义(这是正确的,因为测试不是程序的一部分)。
但是,如果我在main.go中设置全局变量,我就无法在main_test中设置它。
正确的做法是什么?
英文:
i'm trying to set a variable from my unit tests file
main_test.go
var testingMode bool = true
main.go
if testingMode == true {
//use test database
} else {
//use regular database
}
If I run "go test", this works fine. If I do "go build", golang complains that testingMode is not defined (which should be the case since tests aren't part of the program).
But it seems if I set the global variable in main.go, I'm unable to set it in main_test.
What's the correct way to about this?
答案1
得分: 18
尝试这样做:
在 main.go
中将你的变量定义为全局变量:
var testingMode bool
然后在你的测试文件 main_test.go
中将其设置为 true
:
func init() {
testingMode = true
}
英文:
Try this:
Define your variable as global in main.go
:
var testingMode bool
And then set it to be true
in your test file main_test.go
:
func init() {
testingMode = true
}
答案2
得分: 1
Pierre Prinetti的答案在2019年不起作用。
相反,可以这样做。虽然不是最理想的方法,但可以完成任务。
//在你要测试的模块中(而不是测试模块):
func init() {
if len(os.Args) > 1 && os.Args[1][:5] == "-test" {
log.Println("testing")//特殊的测试设置在这里
return // ...或者完全跳过设置
}
//...
}
英文:
Pierre Prinetti's Answer doesn't work in 2019.
Instead, do this. It's less then ideal, but gets the job done
//In the module that you are testing (not your test module:
func init() {
if len(os.Args) > 1 && os.Args[1][:5] == "-test" {
log.Println("testing")//special test setup goes goes here
return // ...or just skip the setup entirely
}
//...
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论