2017-02-20 4 views
0

Я учусь в JUnit с рамками Mockito, я пытался писать тестовые случаи на моем коде службы, как: -JUnit Mockito рамка

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-код на 100% совместимым с тестом с тестовым примером JUnit, или я пропустил какой-то момент.

+0

где вы создаете макет для 'employeeInstance'? –

+0

Использование команды @Mock EmployeeInstance employeeInstance; в тестовом классе. –

+0

У вас есть 'thenReturn (employeeInstance)', но на следующей строке вы используете 'employeeInstanceMocked'. Это опечатка? Вы хотите, чтобы они были одинаковыми. –

ответ

0

Вам нужно использовать посмеянный класс, если вы хотите издеваться над объектом. Если вы хотите, чтобы поведение фактического класса, например, ссылка на dao, которую вы пытались вызвать, вам нужно использовать шпион.

Junit:

ChildClass childClass = Mockito.spy(new ChildClass()); 
+0

Вы тестировали это, или это просто догадка? –

1

Вы можете сделать это с Mockito. Пример из documentation:

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()); 

Но, как указано в документации, это плохая практика, в связи с нарушением Law of Demeter.

Смежные вопросы