如果您不想为所有内容定义行为并且不想限制对该模拟的调用,那么 EasyMock 和 Mockito 中的漂亮模拟都是一件好事。
但对我来说,它们有一个很大的缺陷:如果方法的返回类型是Object
或从Object
继承的任何内容,它们总是返回null
。
我想知道一个或两个框架中是否有某些东西可以为返回Optional<?>
的方法返回Optional.empty()
,或者为返回List<?>
的方法返回Collections.emptyList()
等等......
我还找不到这样的东西。
默认情况下,Mockito 的当前版本返回空列表和可选。AFAIK 这是 2.0 版的新功能(至少是可选)。以下测试在 Mockito 2.27.0 中成功。
class MockitoTest
static class SomeType {
Optional<String> headline;
List<String> texts;
Optional<String> getHeadline() {
return headline;
}
List<String> getTexts() {
return texts;
}
}
@Test
void mock_returns_empty_List_by_default() {
SomeType o = mock(SomeType.class);
List<String> texts = o.getTexts();
assertEquals(emptyList(), texts);
}
@Test
void mock_returns_empty_Optional_by_default() {
SomeType o = mock(SomeType.class);
Optional<String> headline = o.getHeadline();
assertFalse(headline.isPresent());
}
}