测试使用EasyMock调用void方法

nkr*_*1pt 16 java unit-testing easymock

这可能吗?我尝试过,EasyMock.expectLastCall().times(0);但EasyMock抱怨时间必须> = 1

Daw*_*ica 21

你可以使用.andThrow(new AssertionFailedError()).anyTimes();- 这是Assert.fail()抛出相同的异常,但是比制作一个更简洁Answer.

  • 也许为测试失败的原因添加一个很好的描述可以进一步改进这个解决方案(这是IMO给出的最好的解决方案). (2认同)

小智 10

使用easymock 3.0,您需要在expectLastCall上添加.anyTimes(),否则测试将失败:

Expectation failure on verify: myMethod(): expected: 1, actual: 0`
Run Code Online (Sandbox Code Playgroud)

基于nkr1pt示例:

expectLastCall().andAnswer(new IAnswer() {
    public Object answer() {
      Assert.assertFail();
      return null;
    }
}).anyTimes();
Run Code Online (Sandbox Code Playgroud)

  • 我想:Assert.assertFail(); 应该只是:Assert.fail(); (3认同)

Vic*_*Vic 7

不调用某些方法的事实由Mock或控制StrictMock.当调用未记录的方法时,它们将抛出异常.仅当使用NiceMocks 时才会出现此问题,其中在调用未记录的方法时返回默认值.

所以一个解决方案就是不能使用NiceMocks.

  • 我非常不同意这个结论.也许,在这种情况下,漂亮的模拟不是最好的选择.但是如果你想确保一个方法不会被调用,实际上这是你想要测试的唯一方法,最好用一个模拟的方法强调这一点,该方法失败并带有适当的消息. (2认同)

nkr*_*1pt 0

我设法想出了一个解决方案:

expectLastCall().andAnswer(new IAnswer() {
    public Object answer() {
        Assert.assertFail();
        return null;
    }
});
Run Code Online (Sandbox Code Playgroud)