EasyMock 1 SetDefaultReturn()在更改为EasyMock 2和Return()时失败

时间:2014-02-10 17:37:37

标签: java easymock

我遇到了一些看起来像这样的EasyMock 1遗留代码:

service.convertValue("value");
control.setDefaultReturnValue(new Integer(1));
//Run code that calls that method

升级到EasyMock 2时,我将其转换为以下内容(从this answer注明setDefaultReturnValue()相当于andReturn().anyTimes()):

expect(service.convertValue("value").andReturn(new Integer(1)).anyTimes());
//Run code that calls that method

但现在我收到了错误Unexpected method call convertValue("123")

很明显,在原始代码中,"value"应该只是一个占位符。但除此之外,为什么这在EasyMock 1中有效,而在EasyMock 2中无效?

1 个答案:

答案 0 :(得分:0)

埋在EasyMock 1.2 documentation中是一个解释这个问题的单一句子:

  

以下代码将MockObject配置为回答42到   voteForRemoval(“Document”)一次为-1,后续调用为,以及voteForRemoval()的所有其他参数:

mock.voteForRemoval("Document");
control.setReturnValue(42);
control.setDefaultReturnValue(-1);

(Empahsis mine)

换句话说,setDefaultReturnValue()不仅在第一次之后为voteForRemoval("Document")返回-1,而且如果传入任何其他参数也返回-1。它看起来像是编写测试的人你正看着知道这一点,并且认为他会扔掉一个占位符,而不是关心实际的参数。

EasyMock 2/3相当于您的代码:

expect(service.convertValue(isA(String.class))).andReturn(new Integer(1)).anyTimes();

EasyMock 2清除了很多这样的含糊之处,迫使开发人员明确定义他们想要的东西。考虑到旧式可能出现的意外副作用,它可能是最好的。