模拟一个DAO类和一个方法

时间:2015-09-16 14:52:57

标签: java unit-testing mockito dao

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

1 个答案:

答案 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);