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

在 go 中测试非返回方法

在 go 中测试非返回方法

Go
慕森卡 2021-10-11 13:36:35
我有一个简单的方法,它只检查参数是否为空,然后根据结构字段调用两种方法之一。我将如何测试它?func (cT *customType) someMethod(message string) {    if message == ""{        return    }    if cT.value == nil {        cT.doFunctionOne()    } else {        cT.doFunctionTwo()    }}在 Javascript 中,我会创建一个间谍doFunctionOne()并模拟对象。模拟也Go很有效,但我将如何做“间谍”部分?或者是否有另一种惯用的方法来测试这种方法?
查看完整描述

3 回答

?
ibeautiful

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

第一:您不会将方法命名为“doFunctionOne”而是“methodOne”:-)

如果 doFunctionOne 和 doFunctionTwo 都没有任何可观察到的效果,那么测试它绝对没有意义。所以我们可以假设它们确实有可观察到的副作用,无论是对环境还是对它们被调用的 customType。

现在只需测试这些副作用。如果两种方法都返回,这是微不足道的。如果它们无限循环,它会变得更难,但仍然可行。

恕我直言,没有必要从“根据值测试它是调用一还是二”的意义上来“测试”这种方法:对我来说,这是低级的,过多地增加覆盖率是徒劳的。如果你调用某个方法,它必须做一些事情(可观察到的效果),你应该检查这个效果,而不是内部工作原理。


查看完整回答
反对 回复 2021-10-11
?
慕的地8271018

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

  1. 您可以在每个函数调用之前添加日志。

  2. 注入您自己的记录器实现,例如 []string。

  3. 检查字符串切片是否有匹配的字符串。

但是,如果您正在创建函数工厂,最好将函数返回给调用者并且调用者将运行该函数。
然后测试很简单。

其次,只有两种函数,流函数和逻辑函数。您在同一个函数中混合了流和逻辑。测试困难只是这种不良做法的一个症状。


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信