为了账号安全,请及时绑定邮箱和手机立即绑定

golang包中的mock方法

golang包中的mock方法

Go
潇潇雨雨 2021-12-20 15:41:25
我一直无法从 golang 包中找到模拟方法的解决方案。例如,我的项目有代码会在 Os.Getwd() 返回错误时尝试恢复。我可以考虑为此进行单元测试的最简单方法是模拟 Os.Getwd() 方法以返回错误,并验证代码是否相应地工作。我尝试使用 testify,但似乎不可能。任何人都有这方面的经验?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

我自己的解决方案是将该方法作为参数,允许在测试时注入“模拟”。另外,创建一个导出的方法作为公共门面和一个未导出的方法用于测试。


例子:


    func Foo() int {        

            return foo(os.Getpid)

    }                       


    func foo(getpid func() int) int {

            return getpid()      

    } 


查看完整回答
反对 回复 2021-12-20
?
ibeautiful

TA贡献1993条经验 获得超6个赞

看起来,看看os.Getwd 测试可以为您提供一些如何测试代码的示例。寻找函数TestChdirAndGetwdTestProgWideChdir

从阅读这些内容来看,测试似乎创建了临时文件夹。

因此,一种务实的方法是创建临时文件夹,就像上面提到的测试一样,然后破坏它们,从而os.Getwd引发错误以供您进行测试。

请小心执行这些操作,因为它们可能会弄乱您的系统。我建议在轻量级容器或虚拟机中进行测试。


查看完整回答
反对 回复 2021-12-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

这是 go 编译器的限制,谷歌开发人员不想允许任何钩子或猴子补丁。如果单元测试对你很重要——那么你必须选择一种源代码中毒的方法。所有这些方法如下:

  • 您不能直接使用全局包。

  • 您必须创建方法的隔离版本并对其进行测试。

  • 方法的生产版本包括方法的独立版本和全局包。

但最好的解决方案是完全忽略 go 语言(如果可能的话)。


查看完整回答
反对 回复 2021-12-20
  • 3 回答
  • 0 关注
  • 322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号