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

标签 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 背景让我倾向于后者。

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

最佳答案

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

关于unit-testing - 测试在 Golang 中加载 JSON 配置文件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51789348/

相关文章:

c++ - 非公共(public)功能是否应该进行单元测试以及如何进行?

go - Golang会将文字翻译到下一行

go - 我的神经网络(从头开始)训练,让它离目标更远

go - InDelta 和 InEpsilon 之间的区别

go - 了解测试覆盖率

unit-testing - 在 Go 中进行单元测试时,是否可以动态断言两个值是否相等?

Android 测试项目 - 读取 Assets 文件来测试纯 java 对象

python-3.x - 如何模拟elasticsearch.helpers.bulk

c# - Visual Studio 2008 测试一种方法?

Go 正在打印 xgcc 版本但不是 go 安装版本