我试图模拟一个DAO类,该类具有返回特定类列表的方法。
private List<SpecificClass> getInfo(){
List<SpecificClass> returnInformation = dao.list(ParamOne, Param Two, SpecificClass.class);
}
上述方法中提到的dao指的是另一个类。
我从模仿DAO类开始。
Mockito.mock(TheDaoClass.class);
和创建模拟列表
private @Mock List<SpecificClass> returnedList = new ArrayList<SpecificClass>();
然后调用那个方法
dao.list(ParamOne, Param Two, SpecificClass.class);
,并指定调用
时需要做什么。 when(dao.list(ParameterOne, anyString(), SpecificClass.class)).thenReturn(returnedList);
当我执行上述操作时,我得到一个空指针异常。有两种原因:
我知道列表是空的,但它应该是保留SpecificClass的五个值,但这一点不应该抛出一个错误。
我认为对象dao
没有得到适当的嘲笑。我只是模仿整个类Mockito.mock(TheDaoClass.class)
,以便模仿与该类相关的任何对象。我认为这并没有达到目标。我如何着手解决这个问题?任何帮助都是感激的。谢谢。
使模拟DAO对象成为测试类的属性,如下所示:
@Mock
private TheDaoClass mockDaoClass;
然后,在测试类开始的setUp()
方法中调用initMocks
:
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
}
这应该可以防止NullPointer
.
另外,我建议不要模拟List
对象(如果您模拟任何Java库数据类型,您可能做错了),您应该创建一个列表并填充它。
List<SpecificClass> list = new ArrayList<SpecificClass>();
list.add(new SpecificClass());
然后从模拟方法返回列表。
when(mockDaoClass.list(anyString(), anyString(), SpecificClass.class)).thenReturn(list);