模拟一个 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);
我正在尝试模拟一个 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);