我正在尝试模拟一个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)
,以便模拟与该类相关的任何对象。我认为它没有实现目标。我该如何解决这个问题?任何帮助表示赞赏。谢谢。
答案 0 :(得分:1)
使您的模拟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);