我一直在编写我的单元测试,大多数时候,我只是断言主题对象返回的输出值是单元测试的,偶尔我会使用验证调用来确保某些方法永远不会调用或调用某些数量的次。
现在,我被代码审查员要求在我正在使用的每个模拟器上添加验证调用,这除了我在输出上的断言之外。你认为,添加这些验证调用是否值得?
答案 0 :(得分:1)
虽然这很危险地接近于纯粹的意见(因此也是StackOverflow的主题),但你使用了mockito标签,所以我可以回答关于Mockito的设计理念通过Mockito的创始人Szczepan Faber的博客文章证明了这一点,该帖子来自Mockito的课程级文档。
在以下两种情况之一中添加verify
次来电:
在以下任何一种情况下,您可能都不需要添加verify
次调用:
verifyNoMoreInteractions
来说,不重要或有明显副作用的来电("Should I worry about the unexpected?" blog post来自Mockito documentation #8)此处过度验证的风险是测试可能变得脆弱,因此完全合理的实施更改会导致测试失败(即调用不同的方法,或者不调用,或不以相同的顺序调用)。如果高级代码审核员告诉您添加验证,我不会说您无法:这绝对是一个判断调用,您的审核人可能是在实施方面考虑过于防守。但是,请记住,测试的目的是验证实现是否符合promises ,而不是实现在内部以某种方式运行。如果您的验证过于苛刻,可能会导致以后的测试维护困难,同时让您无法接近使用代码。
作为额外的资源,请参阅Martin Fowler's post "Mocks aren't Stubs",其中描述了各种测试双打(假货,假人,存根,嘲讽)以及与经典状态测试一起使用或代替经典状态测试的一些权衡。< / p>