Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在go测试文件中使用包级别变量_Unit Testing_Go_Go Testing - Fatal编程技术网

Unit testing 在go测试文件中使用包级别变量

Unit testing 在go测试文件中使用包级别变量,unit-testing,go,go-testing,Unit Testing,Go,Go Testing,我正试图为这样一个文件编写一个单元测试 //file1.go var ( fileName = "/path/to/original/file.json" ) func DoSomething(){ // Read <fileName> and do some stuff } //file1.go 变量( fileName=“/path/to/original/file.json” ) func DoSomething(){ //阅读和做一些事

我正试图为这样一个文件编写一个单元测试

//file1.go
var (
    fileName = "/path/to/original/file.json"
)

func DoSomething(){
    // Read <fileName> and do some stuff
}
//file1.go
变量(
fileName=“/path/to/original/file.json”
)
func DoSomething(){
//阅读和做一些事情
}
但是对于单元测试,我想使用DoSomething()使用的/path/to/dummy/file.json file1_test.go将与file.go位于同一个包中 为这个函数编写测试用例的正确方法是什么


将fileName变量修改为/path/to/dummy/file.json是一个好主意吗?或 我们是否应该修改file1.go以使其适合测试


这是使这些类型的值可配置的标准,以便在单元测试期间可以修改它们(例如,在本例中为文件名),还是我们应该修改我们的函数,以便它可以直接处理字节流数据,以便在测试期间可以直接提供虚拟数据?

使用配置/设置结构。 在生产中,最好使用YAML保存配置值

type Config struct{FileName string}
总的来说,去吧

var conf Config
func main(){
   conf = LoadConfigFromYaml()
   DoSomething()
}

func DoSomething(){
// Read <fileName> from conf.FileName
}
它还允许您为每个测试设置不同的配置


更好的方法是创建一个库,在初始化时接受Config,并从main和测试中注入Config,避免使用
main-package
变量。

如果没有共享var,您可以这样做:,或者只需将func更改为
DoSomething(文件名字符串)
。“将fileName变量修改为/path/to/dummy/file.json是否是一个好主意?”当然是。
func TestSomething(t *testing.T){
   conf = Config{FileName: "/path/to/dummy/file.json"}
   DoSomething()
}