测试在Golang中加载JSON配置文件的方法

时间:2018-08-10 15:05:31

标签: unit-testing go testify

在受测试的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 methodstestify框架,但是我尝试模拟的东西不属于接口(非OOP语言的陷阱!)

1 个答案:

答案 0 :(得分:3)

有两种方法可以做到。拥有示例数据文件来测试加载和解析文件当然并不稀奇(您可以在标准库中找到它)。像这样的函数采用io.Reader而不是文件路径也是一种很常见的做法,因此在测试中,您只需传入例如bytes.Reader,可以在测试其他所有文件时有效地“模拟”文件。使用哪种方法(或者选择两种方法)取决于您的用例和设计目标。切换到io.Reader可以为您带来更大的灵活性,但是只有您知道该灵活性在上下文中是否有任何价值。如果没有,只需随身携带一个测试文件并阅读。