如何使用定义为常量的文件路径测试Go代码

时间:2019-04-22 10:16:35

标签: unit-testing go constants

我正在为我的一个项目编写测试,该项目涉及固定的文件路径和基本URL。对我来说,定义它们的最合乎逻辑的方法是借助相关模块中的公共/私有常量,但这会妨碍良好的测试实践。我该如何解决?

我搜索了可能的解决方案,发现我可以为需要路径的结构定义两个构造函数:一个定义默认路径,另一个接受自定义路径

func Construct(param string) MyStruct {
    return MyStruct {Param: param, Path: "/default/path"}
}

func ConstructWithPath(param, path string) MyStruct {
    return MyStruct {Param: param, Path: path}
}

对我来说这很丑陋,并且这是专门针对测试的解决方案,因为我考虑的路径是固定的并且是已知的。

2 个答案:

答案 0 :(得分:4)

这称为dependency injection,通常用于测试。使代码更具可测试性并没有特别丑陋的地方。

一种替代方法是在软件包中将路径定义为var(将它们设为私有-测试位于同一软件包中),并且测试可以在执行测试之前将这些var设置为某种值。 >

答案 1 :(得分:0)

您的解决方案很好。建议您将代码和接口设计为可测试的,这是常见的建议做法。 我会稍加修改您的解决方案以防止重复-

func Construct(param string) MyStruct {
    return ConstructWithPath(param, "/default/path")
}

func ConstructWithPath(param, path string) MyStruct {
    return MyStruct {Param: param, Path: path}
}

如果您不希望此包之外的任何人使用它,则无需导出ConstructWithPath。