【问题标题】:Testing a method that loads JSON config files in Golang测试在 Golang 中加载 JSON 配置文件的方法
【发布时间】:2018-08-10 15:05:31
【问题描述】:

在正在测试的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 背景让我倾向于后者。

通过探索,我找到了我正在使用的testify 框架has a package for mocking methods,但我试图模拟的不属于接口(非 OOP 语言的陷阱!!)

【问题讨论】:

    标签: unit-testing go testify


    【解决方案1】:

    有几种方法可以做到这一点。拥有一个示例数据文件来测试加载和解析文件当然并不罕见(您可以在标准库中的某些地方找到它)。对于像这样的函数来说,采用io.Reader 而不是文件路径也是一种非常常见的做法,因此在测试中您可以只传入例如bytes.Reader 在测试其他所有内容的同时有效地“模拟”文件。使用哪种方法(或两者,如果您选择)取决于您的用例和设计目标;切换到io.Reader 为您提供了更大的灵活性,但只有您知道这种灵活性在上下文中是否有价值。如果没有,只需将测试文件与您的测试一起保存并阅读即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2017-06-25
      • 2023-04-04
      • 1970-01-01
      • 2022-12-01
      • 2016-12-30
      • 2013-11-30
      相关资源
      最近更新 更多