2010-09-14 39 views
12

这可能吗? 我试过EasyMock.expectLastCall().times(0);,但EasyMock抱怨时间必须> = 1测试void方法没有被EasyMock调用

+0

请参阅http://stackoverflow.com/questions/859031/easymock-void-methods,不知道这是一个愚蠢的。 – philant 2010-09-14 18:45:34

+4

这不是重复的。 – hiergiltdiestfu 2013-07-22 10:30:02

回答

0

我设法拿出一个解决方案:

expectLastCall().andAnswer(new IAnswer() { 
    public Object answer() { 
     Assert.assertFail(); 
     return null; 
    } 
}); 
+0

对我来说这是行不通的。它说“预期:1,实际:0”。 – Vic 2012-08-23 14:44:25

+1

同意这不起作用。正确的答案来自David Nguyen。 – dhaag23 2014-09-02 21:01:25

1

对我来说看起来像一个bug。内部类Range不允许设置最大值小于1.

难道你不能嘲笑该方法,只需拨打Assert.fail()

+0

是的,我最终这样做,看到我的回答 – nkr1pt 2010-09-15 20:54:50

1

如果你希望你的方法不被称为那么就没有记录它。但我同意它不会用一个很好的模拟。

8

与EasyMock的3.0,你需要在expectLastCall或测试添加.anyTimes()将失败:

Expectation failure on verify: myMethod(): expected: 1, actual: 0` 

基于nkr1pt例如:

expectLastCall().andAnswer(new IAnswer() { 
    public Object answer() { 
     Assert.assertFail(); 
     return null; 
    } 
}).anyTimes(); 
+3

我想:Assert.assertFail();应该是:Assert.fail(); – Matt 2013-05-27 21:06:57

+1

尽管这是一个可行的答案,但我更喜欢David Wallace的那个,因为它不那么冗长。 – qben 2015-02-12 10:25:58

7

一个事实,有些方法不叫的是由MockStrictMock控制。当没有记录的方法被调用时,它们会抛出异常。只有在使用NiceMock s时才会出现此问题,其中调用未记录的方法时会返回默认值。

所以一个解决方案可以是不使用NiceMock s

+2

我强烈不同意这个结论。也许,在这种情况下,好的模拟不是最好的选择。但是如果你想确保一个方法不会被调用,实际上这是你想测试的唯一的东西,最好用一个模拟的方法来强调这个方法,它会失败并带有适当的消息。 – qben 2015-02-12 10:24:32

+1

这是一个很好的论点。我想指出这一点,因为我偶然发现为什么我不能指定'times(0)'。直到后来我意识到,那种与嘲讽的想法相矛盾,而不是好的嘲弄不允许未记录的方法被执行。抛出一个断言异常,因为答案看起来更像是一种解决方法,应该使用不错的模拟来指定0方法调用。 也许我在结论中有点自信。我会纠正它。 – Vic 2015-02-12 11:54:06

16

您可以使用​​3210 - 这与Assert.fail()引发的例外情况相同,但比制作Answer的冗余性要少。

+2

也许增加一个很好的描述为什么测试失败进一步改善了这种解决方案(这是所有这里给出的最好的IMO)。 – qben 2015-02-12 10:27:24