在受测试的Golang项目中,有一种方法可以将JSON配置文件加载到变量中。其代码如下:
// Load the JSON config file
func Load(configFile string, outputObj interface{}) *errors.ErrorSt {
var err error
// Read the config file
jsonBytes, err := ioutil.ReadFile(configFile)
if err != nil {
fmt.Println(err.Error())
return errors.File().AddDetails(err.Error())
}
// Parse the config
if err := json.Unmarshal(jsonBytes, outputObj); err != nil {
return errors.JSON().AddDetails("Could not parse" + configFile + ": " + err.Error())
}
return nil
}
我希望对其进行测试,但我不知道该为测试用例创建伪造的JSON文件,还是只是模拟整个功能。我的Java背景使我倾向于后者。
对此进行了探索,我发现我正在使用has a package for mocking methods的testify
框架,但是我尝试模拟的东西不属于接口(非OOP语言的陷阱!)
答案 0 :(得分:3)
有两种方法可以做到。拥有示例数据文件来测试加载和解析文件当然并不稀奇(您可以在标准库中找到它)。像这样的函数采用io.Reader
而不是文件路径也是一种很常见的做法,因此在测试中,您只需传入例如bytes.Reader
,可以在测试其他所有文件时有效地“模拟”文件。使用哪种方法(或者选择两种方法)取决于您的用例和设计目标。切换到io.Reader
可以为您带来更大的灵活性,但是只有您知道该灵活性在上下文中是否有任何价值。如果没有,只需随身携带一个测试文件并阅读。