我在使用 EasyMock 2.5.2 和 JUnit 4.8.2(通过 Eclipse 运行)时遇到问题。我已阅读此处所有类似的帖子,但尚未找到答案。我有一个包含两个测试的类,它们测试相同的方法。我正在使用匹配器。
- 每个测试单独运行时都会通过。
- 第一个测试总是通过 - 如果我切换文件中测试的顺序,情况就是如此。
这是测试代码的简化版本:
private Xthing mockXthing;
private MainThing mainThing;
@Before
public void setUp() {
mockXthing = EasyMock.createMock(Xthing.class);
mainThing = new MainThing();
mainThing.setxThing(mockXthing);
}
@After
public void cleanUp() {
EasyMock.reset(mockXthing);
}
@Test
public void testTwo() {
String abc = "abc";
EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(abc);
EasyMock.replay(mockXthing);
String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
assertEquals("abc", testResult);
EasyMock.verify(mockXthing);
}
@Test
public void testOne() {
String xyz = "xyz";
EasyMock.expect(mockXthing.doXthing((String) EasyMock.anyObject())).andReturn(xyz);
EasyMock.replay(mockXthing);
String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
assertEquals("xyz", testResult);
EasyMock.verify(mockXthing);
}
第二个(或最后一个)测试总是失败并出现以下错误:
java.lang.IllegalStateException: 1 matchers expected, 2 recorded
任何对此的见解将不胜感激。
谢谢,
安妮
我还没有仔细观察,但这看起来很可疑:
String testResult = mainThing.testCallingXthing((Long) EasyMock.anyObject());
anyObject()
是一个匹配器,你称之为after重播。它不用于生成任何对象。它用于指示 EasyMockallow任何物体。 EasyMock 正在检测额外的匹配器,但在第二次测试之前它不会有害。此时,EasyMock 已记录但尚未使用的匹配器数量 (2) 与第二个预期的参数数量不符doXthing
呼叫(1)。
你应该传入real参数为testCallingXthing
(或处于重播模式的模拟)。尝试传入null
直接,或者像这样的真实值2
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)