我正在使用Mockito Framework学习Junit,我尝试在我的服务代码上编写测试用例: -
ChildClass childClass = (ChildClass)(employeeDao.callMethod().getClassRef());
junit测试案例: -
ChildClass childClass = new ChildClass();
Mockito.when(employeeDao.callMethod().getClassRef()).thenReturn(childClass);
但是获得java.lang.nullpointerexception
然后尝试以两个单独的陈述进行分配方法,例如: -
ChildClass childClass = new ChildClass();
Mockito.when(employeeDao.callMethod()).thenReturn(employeeInstance);
Mockito.when(employeeInstanceMocked.getClassRef()).thenReturn(childClass);
,但由于Mockito而导致的对象施放异常仍在返回superClassObject,但代码将施放到ChildClass对象中。当前的Java代码与Junit Test案例测试100%兼容,或者我缺少某个点。
您可以使用Mockito进行此操作。文档中的示例:
Foo mock = mock(Foo.class, RETURNS_DEEP_STUBS);
// note that we're stubbing a chain of methods here: getBar().getName()
when(mock.getBar().getName()).thenReturn("deep");
// note that we're chaining method calls: getBar().getName()
assertEquals("deep", mock.getBar().getName());
但是,如文档中所述,由于违反了塞米特法律,这是不良的实践。
当需要模拟对象时,您需要使用模拟的类。如果您想要实际班级的行为,例如您尝试使用间谍的DAO的引用。
junit:
ChildClass childClass = Mockito.spy(new ChildClass());