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

Unit testing 如何使用定义为常量的文件路径测试Go代码,unit-testing,go,constants,Unit Testing,Go,Constants,我正在为我的一个项目编写测试,该项目涉及固定的文件路径和基本URL。对我来说,定义它们的最合乎逻辑的方式是通过相关模块中的公共/私有常量,但这妨碍了良好的测试实践。我怎样才能解决这个问题 我搜索了一个可能的解决方案,发现我可以为需要路径的结构定义两个构造函数:一个定义默认路径,另一个接受自定义路径 func Construct(param string) MyStruct { return MyStruct {Param: param, Path: "/default/path"} }

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

这被称为,并且通常用于测试。让代码更易于测试并没有什么特别难看的地方


另一种方法是将路径定义为包中的变量,使其私有-测试位于同一个包中,测试可以在执行测试之前将这些变量设置为某个值。

您的解决方案很好。设计可测试的代码和接口是一种常见的推荐做法。 我会稍微修改您的解决方案以防止重复-

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

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

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

如果测试对您很重要,那么专门为测试定制的解决方案应该没有问题。