我遇到了一些EasyMock 1遗留代码,如下所示:
service.convertValue("value");
control.setDefaultReturnValue(new Integer(1));
//Run code that calls that method在升级到EasyMock 2时,我将其转换为以下内容(从这个答案中注意到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中有效呢?
发布于 2014-02-10 17:37:36
隐藏在EasyMock 1.2文档中的是一个单独的集合,它解释了这个问题:
下面的代码将MockObject配置为回答42到voteForRemoval(“文档”)一次和-1,用于后续调用以及voteForRemoval()的所有其他参数:
mock.voteForRemoval("Document");
control.setReturnValue(42);
control.setDefaultReturnValue(-1);(清除地雷)
换句话说,setDefaultReturnValue()不仅在第一次传递voteForRemoval("Document")后返回-1,而且如果传入任何其他参数,也返回-1。看起来,写测试的人知道这一点,只是觉得他会加入一个占位符,而不关心实际的参数。
您的代码的EasyMock 2/3等价物是:
expect(service.convertValue(isA(String.class))).andReturn(new Integer(1)).anyTimes();EasyMock 2消除了许多类似于此的歧义,并迫使开发人员明确定义他们所要寻找的内容。这可能是最好的,考虑到意外的副作用,可能会发生在旧风格。
https://stackoverflow.com/questions/21684159
复制相似问题