我正在为我的项目编写测试,其中涉及固定文件路径和基本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}
}
这对我来说非常难看,它是专门为测试量身定制的解决方案,因为我正在考虑的路径是固定的并且是已知的。
这被称为dependency injection,通常用于测试。让代码更易于测试并没有什么特别难看的。
另一种方法是将路径定义为包中的var
s(使它们成为私有 - 测试存在于同一个包中),测试可以在进行测试之前将这些变量设置为某些变量。
你的解决方案很好。将代码和接口设计为可测试是一种常见且推荐的做法。我会稍微修改你的解决方案以防止重复 -
func Construct(param string) MyStruct {
return ConstructWithPath(param, "/default/path")
}
func ConstructWithPath(param, path string) MyStruct {
return MyStruct {Param: param, Path: path}
}
如果您不希望此包之外的任何人使用它,则无需导出ConstructWithPath。