Вы делаете это неправильно. Сначала вы должны выложить свой тест с ключевыми словами BDD или AAA , с BDD:
@Test public void testIsInProgressExeption() {
// given
// when
// then
}
В части , заданной , вы напишите свой прибор, то есть настройку своего тестового сценария. В части когда вы назовете производственный код, т.е. испытуемый объект. Наконец, в части когда вы напишите свои проверки и / или утверждения.
Заглушки идут в приборе, поэтому эта строка не на месте, она здесь не принадлежит, это всего лишь определение поведения.
when(bean.getService().isInProgress()).thenThrow(new Exception());
Однако вместо bean.getService()
следует указывать непосредственно ссылку на сервис, это неудобно.
Я не совсем понимаю, почему вы создаете новый экземпляр компонента в предложении catch, это странно. Но вот как я буду писать тест. Обратите внимание на то, как я объясняю в названии модульного теста, какое поведение тест тестирует в действительности, писать это в случае верблюда очень болезненно для чтения, поэтому я использую соглашение , подчеркнутое , , все нормально в Тесты .
@Test public void when_service_throw_Exception_InProgress_then_returns_false() throws Exception {
// given
MyBean bean = new MyBean();
MyService service = mock(MyAdapterService.class);
bean.setService(service);
when(service.isInProgress()).thenThrow(new Exception());
// when
boolean result = bean.isInProgress();
// then
assertFalse(result);
}
Также я бы разделил утверждение о событии, это другое поведение:
@Test public void when_service_throw_Exception_InProgress_then_log_event_MDI09() throws Exception {
// given
MyBean bean = new MyBean();
MyService service = mock(MyAdapterService.class);
bean.setService(service);
// somehow set up the logEvents collaborator
when(service.isInProgress()).thenThrow(new Exception());
// when
bean.isInProgress();
// then
assertTrue(logEvents.containsMessage("MDI09"));
}
Вы даже можете пойти дальше, чтобы упростить прибор, если вы используете JUnit, вы пишете этот код:
@RunWith(MockitoJUnitRunner.class)
public class MyBeanTest {
@Mock MyService service;
@Mock LogEvents logEvents;
@InjectMocks MyBean bean;
@Test public void when_service_throw_Exception_InProgress_then_log_event_MDI09() throws Exception {
// given
when(service.isInProgress()).thenThrow(Exception.class);
// when
bean.isInProgress();
// then
verify(logEvents).logEvent("MDI09");
}
}
В приведенном выше примере я также экстраполировал материал событий журнала, но это просто, чтобы дать представление о том, что возможно.