java - EasyMock : java. lang.IllegalStateException : 1 matchers expected, 2 记录

标签 java easymock matcher

我在使用 EasyMock 2.5.2 和 JUnit 4.8.2(通过 Eclipse 运行)时遇到问题。我在这里阅读了所有类似的帖子,但没有找到答案。我有一个包含两个测试相同方法的测试的类。我正在使用匹配器。

  1. 单独运行时每个测试都会通过。
  2. 第一个测试总是通过 - 如果我在文件中切换测试顺序,情况就是如此。

这是测试代码的简化版本:

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() 是一个匹配器,您在重播之后 调用它。它不用于生成任何对象。它用于指示 EasyMock 允许任何对象。 EasyMock 正在检测那个额外的匹配器,但在第二次测试之前它是无害的。此时,EasyMock 已记录但尚未使用的匹配器数量 (2) 与第二次 doXthing 调用的预期参数数量 (1) 不一致。

您应该将真实 参数传递给testCallingXthing(或处于重播模式的模拟)。尝试直接传入 null,或者像 2 这样的真实值。

关于java - EasyMock : java. lang.IllegalStateException : 1 matchers expected, 2 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550036/

相关文章:

java - EasyMock:我做错了什么?

JAVA正则表达式失败

java - 有没有办法简化 Java 模式匹配从 POST 请求中检索两条数据?

java - 如何在测试之间重置

java - 如何在没有源文件但使用 fat jar 的情况下运行 gradle JUnit 测试作业?

java - 将随机值模拟到对象中

java - 当所有节点都是模拟时,如何使用 EasyMock 测试 "tree of calls"?

java - 使用 Matchers.any() 匹配模拟对象

java - 如何使 Google Appengine 任务可重复?

java - 如何配置 IntelliJ IDEA 以允许 Java 文件中的 shebang