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

问题描述 投票:2回答:2

我正在为我的项目编写测试,其中涉及固定文件路径和基本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}
}

这对我来说非常难看,它是专门为测试量身定制的解决方案,因为我正在考虑的路径是固定的并且是已知的。

unit-testing go constants
2个回答
4
投票

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

另一种方法是将路径定义为包中的vars(使它们成为私有 - 测试存在于同一个包中),测试可以在进行测试之前将这些变量设置为某些变量。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.