模拟一个 DAO class 和其中的一个方法

Mock a DAO class and a method within it

我正在尝试模拟一个 DAO class,它有一个 returns 特定 class 列表的方法。

private List<SpecificClass> getInfo(){

List<SpecificClass> returnInformation = dao.list(ParamOne, Param Two, SpecificClass.class);
}

上述方法中提到的dao是指另一个class.

我首先嘲笑那个 DAO class。

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 没有被正确模拟。我只是在嘲笑整个 class Mockito.mock(TheDaoClass.class) 以嘲笑与 class 相关联的任何对象。我认为它没有实现objective。我该如何解决这个问题?任何帮助表示赞赏。谢谢。

使你的模拟 DAO 对象成为你的测试 class 的 属性,像这样:

@Mock
private TheDaoClass mockDaoClass;

然后,在测试开始时的 setUp() 方法中 class 调用 initMocks:

@BeforeClass
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

这应该可以防止 NullPointer.

此外,我建议不要模拟 List 对象(如果你模拟任何 Java 库数据类型,你可能做错了),你应该创建一个列表并填充它.

List<SpecificClass> list = new ArrayList<SpecificClass>();
list.add(new SpecificClass());

然后 return 来自模拟方法的列表。

when(mockDaoClass.list(anyString(), anyString(), SpecificClass.class)).thenReturn(list);