2014-02-12 27 views
0

无论我尝试过什么,都会在存根语句上结束NullPointerException。 方法测试:如何正确存根外部方法? NullPointer嘲讽语句

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()); 
} 

如何这里着手?

UPDATE:按照你的建议,我改写了测试(模拟考试是为确保初始化这个时候:))

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

assertTrue(objectUnderTest.selectEntity(entities)); 

其中DummyT实现T.上了车方法执行空指针,if语句指着。

+0

这是唯一不起作用的测试吗? – dimoniy

+0

你注入了模拟吗? – aNish

+0

这不是'anyObject()'的用途。你实际上必须创建你想要返回的对象。你正在犯的同样的错误OP上http://stackoverflow.com/questions/21532988/stubbing-two-methods-in-a-mock-is-throwing-exception-using-mockito-and-spring-mo –

回答

2

至少存在两个问题:

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

您当然可以使用'MockitoJUnitRunner'而不是明确调用'initMocks'。 –

+0

Thank you.ndeed我忘了在这个测试类中我的应用程序中关于模拟初始化的类。 – oundru87