Java EasyMock 1 SetDefaultReturn()更改为EasyMock 2 andReturn()时失败
我遇到了一些EasyMock 1遗留代码,如下所示:Java EasyMock 1 SetDefaultReturn()更改为EasyMock 2 andReturn()时失败,java,easymock,Java,Easymock,我遇到了一些EasyMock 1遗留代码,如下所示: service.convertValue("value"); control.setDefaultReturnValue(new Integer(1)); //Run code that calls that method 升级到EasyMock 2时,我将其转换为以下内容(注意setDefaultReturnValue()相当于andReturn().anytime()): 但是现在我得到了错误意外的方法调用convertValue(“1
service.convertValue("value");
control.setDefaultReturnValue(new Integer(1));
//Run code that calls that method
升级到EasyMock 2时,我将其转换为以下内容(注意setDefaultReturnValue()
相当于andReturn().anytime()
):
但是现在我得到了错误意外的方法调用convertValue(“123”)
很明显,在原始代码中,“value”
应该只是一个占位符。但除此之外,为什么这在EasyMock 1中起作用而在EasyMock 2中不起作用?隐藏在中的是一个单一的背景,可以解释这个问题:
下面的代码将MockObject配置为应答42
voteForRemoval(“Document”)一次,后续调用的-1以及voteForRemoval()的所有其他参数:
(Empahsis矿)
换句话说,setDefaultReturnValue()
不仅在第一次之后为voteForRemoval(“文档”)
返回-1,而且在传入任何其他参数时也返回-1。看起来编写您正在查看的测试的人知道这一点,只是认为他会添加一个占位符,而不关心实际参数
EasyMock 2/3代码的等效代码是:
expect(service.convertValue(isA(String.class))).andReturn(new Integer(1)).anyTimes();
EasyMock 2消除了很多这样的模糊性,并迫使开发人员明确定义他们想要的东西。这可能是最好的,因为旧样式可能会出现意外的副作用
mock.voteForRemoval("Document");
control.setReturnValue(42);
control.setDefaultReturnValue(-1);
expect(service.convertValue(isA(String.class))).andReturn(new Integer(1)).anyTimes();