我有一個奇怪的問題,與Easymock 3.0和JUnit 4.8.2。 僅當從Maven執行測試而不是從Eclipse執行測試時纔會出現此問題。更多的匹配器記錄比預期 - Easymock從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點的匹配預期,2記錄。
奇怪的是我甚至沒有使用參數匹配器。這是測試的唯一方法!並使它更糟糕,它可以從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");
}
this las t方法通過測試,但不通過另一個測試。這怎麼可能!?!?!
問候, 尼科
更多鏈接:
「bartling.blogspot.com/2009/11/using-argument-matchers-in-easymock-and.html」
「WWW .springone2gx.com /博客/ scott_leberknight/2008/09/the_n_matchers_expected_m_recorded_problem_in_easymock」
「stackoverflow.com/questions/4605997/3-matchers-expected-4-recorded」
你使用的是m2eclipse嗎?你的pom是怎樣的? – khmarbaise 2011-04-14 11:36:20
我是。不幸的是,這是一個非常大的問題,因爲這是許多測試工作中的一個測試(這使得更奇怪的)來自許多maven模塊之一。最奇怪的是,如果我啓用maven-surefire-report並同時運行線程,它就可以工作!但它取決於環境(Hudson失敗,但它可以在我的開發框中工作) – Nico 2011-04-14 11:43:24
您是否已經刪除了完整的本地Maven存儲庫並從開發人員的頭上對其進行了測試? – khmarbaise 2011-04-14 11:46:37