如何正确存根外部方法?关于模拟语句的NullPointer

时间:2014-02-12 16:03:41

标签: java unit-testing object mockito

无论我尝试过什么,测试最终会在stubbing语句中出现NullPointerException。 测试方法:

public boolean selectEntity(final List<T> entities) {
if (entities.contains(helper.getLastEntity())) {
    return true;
 }
}

上面的代码片段就足够了,因为(在单元测试中)甚至无法进入条件语句。澄清:getLastEntity返回字段

private T lastEntity 

用于类Helper的对象。 T 是一个界面。

我最好的尝试是:

private @Mock Helper helper;
private @Mock List<T> entities;
...
@Test
public void testSelectEntity(){
    when(entities.contains(notNull(T.class))).thenReturn(true);
    when(helper.getLastEntity()).thenReturn((T) anyObject());
}

如何在这里继续?

更新:按照你的建议,我重写测试(这次嘲笑肯定是初始化:))

final DummyT dummyT = new DummyT();
when(helper.getLastEntity()).thenReturn(dummyT);
when(entities.contains(dummyT).thenReturn(true);

assertTrue(objectUnderTest.selectEntity(entities));

其中DummyT实现T.在方法执行时获得空指针,指向if语句。

1 个答案:

答案 0 :(得分:2)

至少有两个问题:

  • 您无法返回匹配器anyObject()的实例。实例化一个要返回的对象。
  • 根据您的模拟框架,您需要先初始化模拟。例如,在Mockito中,使用:MockitoAnnotations.initMocks(this);