在EasyMock中使用expectLastCall验证方法调用次数是否可行?
关于EasyMock验证方法调用次数的可行性分析
首先明确:你的部分写法可行,但存在冗余或潜在问题,下面分情况说明:
验证方法被调用1次
你写的verify(checkoutMethod, expectLastCall().times(1));是可行的,但属于冗余写法。如果之前已经对checkoutMethod的目标调用录制过1次期望(比如expect(checkoutMethod.execute()).andReturn(...);),直接调用verify(checkoutMethod);就会自动验证该方法是否符合录制的调用次数(默认是1次)。如果要显式指定次数,更简洁的写法是verify(checkoutMethod, times(1));。验证方法未被调用
你写的verify(checkoutMehtod2, expectLastCall().times(0));存在问题:如果checkoutMehtod2从未被录制过任何期望,expectLastCall()会抛出异常,因为没有可关联的前置期望。
正确的做法分两种场景:- 要验证这个mock对象所有方法都没被调用:用
verifyZeroInteractions(checkoutMehtod2); - 要验证特定方法没被调用(其他方法可能被调用):先录制该方法的期望并指定次数为0,再验证,比如:
或者也可以用expect(checkoutMehtod2.someMethod()).times(0); replay(checkoutMehtod2); // 执行测试逻辑 verify(checkoutMehtod2);verify(checkoutMehtod2, times(0).forMethod("someMethod"));这类更明确的写法(取决于EasyMock版本)。
- 要验证这个mock对象所有方法都没被调用:用
总结:验证调用1次的写法能跑,但没必要这么绕;验证未被调用的写法会报错,得换正确的方式。
内容的提问来源于stack exchange,提问作者linuxxx
相关产品推荐
相关产品推荐

