java - 记录的 Matchers 多于预期 - Easymock 从 Maven 而不是从 Eclipse 失败

标签 java eclipse maven junit easymock

我在使用 Easymock 3.0 和 JUnit 4.8.2 时遇到了一个奇怪的问题。 该问题仅在从 Maven 而不是从 Eclipse 执行测试时出现。

这是单元测试(非常简单):

...
protected ValueExtractorRetriever mockedRetriever;
...

@Before
public void before() {
    mockedRetriever = createStrictMock(ValueExtractorRetriever.class);
}

@After
public void after() {
    reset(mockedRetriever);
}

@Test
public void testNullValueExtractor() { 
    expect(mockedRetriever.retrieve("PROP")).andReturn(null).once();
    replay(mockedRetriever);

    ValueExtractor retriever = mockedRetriever.retrieve("PROP");
    assertNull(retriever);

    assertTrue(true);
}

然后我得到:

java.lang.IllegalStateException: 1 matchers expected, 2 recorded.

奇怪的是我什至没有使用参数匹配器。那是唯一的测试方法!更糟糕的是,它在 Eclipse 中工作,在 Maven 中失败!

我找到了一些没有为我提供答案的链接:

如果我更改单元测试并添加一个方法(它确实使用参数匹配器):

@Test
public void testIsBeforeDateOk() {
    expect(mockedRetriever.retrieve((String)anyObject())).andReturn(new PofExtractor()).anyTimes();
    replay(this.mockedRetriever);

    FilterBuilder fb = new FilterBuilder();
    assertNotNull(fb);

    CriteriaFilter cf = new CriteriaFilter();
    assertNotNull(cf);
    cf.getValues().add("2010-12-29T14:45:23");
    cf.setType(CriteriaType.DATE);
    cf.setClause(Clause.IS_BEFORE_THE_DATE);

    CriteriaQueryClause clause = CriteriaQueryClause.fromValue(cf.getClause());
    assertNotNull(clause);
    assertEquals(CriteriaQueryClause.IS_BEFORE_THE_DATE, clause);

    clause.buildFilter(fb, cf, mockedRetriever);
    assertNotNull(fb);

    Filter[] filters = fb.getFilters();
    assertNotNull(filters);
    assertEquals(filters.length, 1);

    verify(mockedRetriever);

    logger.info("OK");
}

最后一个方法通过了测试,但另一个方法没有通过。这怎么可能!?!?!

问候, 妮可

更多链接:

“bartling.blogspot.com/2009/11/using-argument-matchers-in-easymock-and.html”

“www.springone2gx.com/blog/scott_leberknight/2008/09/the_n_matchers_expected_m_recorded_problem_in_easymock”

“stackoverflow.com/questions/4605997/3-matchers-expected-4-recorded”

最佳答案

我有一个非常相似的问题,并将我的发现写在下面的链接中。 http://www.flyingtomoon.com/2011/04/unclosed-record-state-problem-in.html (刚刚更新)

我认为另一个测试中的问题会影响您当前的测试。问题出在另一个测试类上,它影响了你的测试。为了找到真正问题的位置,我建议一个一个地禁用有问题的测试,直到你通知失败的测试。

其实这就是我所做的。我一个一个禁用失败的测试,直到找到有问题的测试。我发现了一个抛出异常并通过“@extected”注解捕获而不停止记录的测试。

关于java - 记录的 Matchers 多于预期 - Easymock 从 Maven 而不是从 Eclipse 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662536/

相关文章:

java - 让我的 jProgressBar 在 1 到 100 的计时器上运行

java - 为什么 Eclipse 提示类型转换不安全?

java - Maven:打包和模块依赖

java - Maven GAE 无法执行 objective-c om.google.appengine :appengine-maven-plugin:1. 9.12 :devserver [. ..] NoSuchElementException

java - 如何停止 @ManyToOne JPA 中的重复对象?

java - 在正方形内绘制正方形

java - 两个java文件。使用 main 方法运行类并尝试从其他文件访问方法时出现 IllegalAccessError

Eclipse Javadoc 的弹出窗口字体大小

c++ - 尝试编译 googletest 但出现以下错误 : '::OpenThread' has not been declared

scala - 以编程方式从 Storm Bolt 杀死拓扑时出现编译错误 : object and package with same name