我在单元测试中做了一些根本错误的事情吗?

nkr*_*1pt 12 unit-testing mocking

在阅读了一篇关于单元测试行为而不是状态的有趣文章之后,我开始意识到我的单元测试经常与我的代码紧密耦合,因为我正在使用模拟.我无法在没有模拟的情况下对单元测试进行成像,但事实是这些模拟将我的单元测试与我的代码非常相似,因为期望和返回调用.

例如,当我创建一个使用模拟的测试时,我会记录对特​​定模拟的所有调用并分配返回值.现在当我因任何原因更改实际代码的实现时,很多测试都会中断,因为模拟不希望这个调用,也迫使我更新单元测试,并有效地强迫我实现每次更改两次......这种情况发生了很多.

这个问题是否是使用模拟所固有的问题,我应该学会忍受它,还是我做了一些根本错误的事情?请赐教:)当然,欢迎提供明确的解释说明.

Jef*_*nal 5

当我创建一个使用模拟的测试时,我记录对特定模拟的所有调用并分配返回值

听起来你可能过度指定期望.

尝试在您的测试中尽可能少地设置代码:存根(而不是期望)与当前测试无关的所有行为,并且仅指定使测试工作绝对需要的返回值.

这个答案包括一个简洁的例子(以及另一个更详细的解释).