我正在为我的一个项目编写测试,该项目涉及固定的文件路径和基本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}
}
对我来说这很丑陋,并且这是专门针对测试的解决方案,因为我考虑的路径是固定的并且是已知的。
答案 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。