3 回答
TA贡献2003条经验 获得超2个赞
我自己的解决方案是将该方法作为参数,允许在测试时注入“模拟”。另外,创建一个导出的方法作为公共门面和一个未导出的方法用于测试。
例子:
func Foo() int {
return foo(os.Getpid)
}
func foo(getpid func() int) int {
return getpid()
}
TA贡献1993条经验 获得超6个赞
看起来,看看os.Getwd 测试可以为您提供一些如何测试代码的示例。寻找函数TestChdirAndGetwd和TestProgWideChdir。
从阅读这些内容来看,测试似乎创建了临时文件夹。
因此,一种务实的方法是创建临时文件夹,就像上面提到的测试一样,然后破坏它们,从而os.Getwd引发错误以供您进行测试。
请小心执行这些操作,因为它们可能会弄乱您的系统。我建议在轻量级容器或虚拟机中进行测试。
TA贡献1880条经验 获得超4个赞
这是 go 编译器的限制,谷歌开发人员不想允许任何钩子或猴子补丁。如果单元测试对你很重要——那么你必须选择一种源代码中毒的方法。所有这些方法如下:
您不能直接使用全局包。
您必须创建方法的隔离版本并对其进行测试。
方法的生产版本包括方法的独立版本和全局包。
但最好的解决方案是完全忽略 go 语言(如果可能的话)。
- 3 回答
- 0 关注
- 322 浏览
添加回答
举报
