2009-12-29 38 views

回答

11

默认情况下,Easymock会为任何您未明确设置期望的方法引发异常。

14

从EasyMock的documentation

尼斯嘲笑

论模拟返回的Mock对象()的所有方法的默认行为是抛出一个AssertionError所有意想不到的方法调用。如果您希望默认允许所有方法调用并返回适当的空值(0,null或false)的“好”Mock对象,请改用niceMock()。

所以你问的是默认行为。

+0

我发现默认行为很烦人,因为您很容易在测试中“最终”要求测试代码效率低下。我曾经做过一个简单的重构,将一个getSomething()调用移到一个循环外部,这导致测试失败,因为我没有调用getSomething 40次(!),而“非常好”的mock鼓励这种类型的测试(因为它如果我预期在重构之前只有一次调用,将会失败)。 – 2011-06-08 09:32:45

+1

@Stein:同意。单元测试应该是细粒度的,理想情况下只测试一件事情。 “不好”的嘲笑阻止了这一点。 – 2011-06-08 10:04:45

+1

从我读到的问题中,OP想要一个模拟,如果它被调用,将会失败验证。好的嘲笑不是OP想要的,因为当测试期间调用好的模拟器时,它仍然通过验证。 – 2017-01-20 18:36:03

14

我知道这个问题很老,但我有同样的问题作为OP,并做了更多的四处看看。我发现以下解决方案:

在EasyMock声明结束时添加​​3210,当调用模拟方法时,测试将失败。

之所以这比单纯地不使用NiceMock更好,并且由于unmocked方法调用而导致测试失败,是因为这允许您专门测试在给定场景中未调用XYZ方法。

我想给大卫华莱士信贷这个答案。我发现这个解决方案在他的回答如下:Test that void method didn't get called with EasyMock

+2

我相信这应该是公认的答案。原因是单元测试通常会随着新的需求而改变,并且很容易错过为什么没有设定模拟期望。该解决方案使缺少的方法调用显式化,因此需要更改代码的人员的更多关注。 – mindreader 2016-06-30 19:36:55

相关问题