我对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);
}
Run Code Online (Sandbox Code Playgroud)
我得到:
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); …Run Code Online (Sandbox Code Playgroud)