如何使用EasyMock为同一方法的不同入参设置Mock?
解决EasyMock同一方法不同参数Mock的异常问题
你在使用EasyMock为同一方法设置不同参数的Mock预期时,抛出了java.lang.IllegalStateException: last method called on mock already has a non-fixed count set异常,这是因为前一个方法预期的调用次数是非固定的,导致无法添加新的参数匹配规则。以下是两种可行的解决方案:
方案1:显式指定固定调用次数
为每个参数对应的预期显式设置固定调用次数(比如times(1)),确保每个预期都是独立的固定次数调用:
expect(mockObject.someMethod("some input", ReturnClassOne.class)) .andReturn(returnObjectOne) .times(1); expect(mockObject.someMethod("some different input", ReturnClassTwo.class)) .andReturn(returnObjectTwo) .times(1);
方案2:使用存根方法(适合任意次数调用场景)
如果该方法会被任意次数调用,且需要根据不同参数返回不同结果,改用andStubReturn()来存根,而非expect():
expect(mockObject.someMethod("some input", ReturnClassOne.class)) .andStubReturn(returnObjectOne); expect(mockObject.someMethod("some different input", ReturnClassTwo.class)) .andStubReturn(returnObjectTwo);
注意事项
expect()用于验证方法的调用次数、顺序是否符合预期,适合严格校验的场景;andStubReturn()用于存根方法逻辑,允许方法被任意次数调用并返回指定结果,更适配同一方法不同参数返回不同值的场景;- 设置完所有预期后,必须调用
replay(mockObject)激活Mock,执行测试逻辑后再用verify(mockObject)验证调用是否符合预期。
内容的提问来源于stack exchange,提问作者Jose Martinez
相关产品推荐
相关产品推荐

