Если вы хотите смоделировать поведение getRecorders()
без использования библиотеки для проверки статических методов (таких как Powermock), вам придется извлечь статический вызов изнутри post()
.Для этого есть несколько вариантов:
Передать EventList
в post()
public post(String json, EventList list) {
...
}
Ввести EventList
вкласс, который содержит post()
public class TheOneThatContainsThePostMethod {
private EventList eventList;
public TheOneThatContainsThePostMethod(EventList eventList) {
this.eventList = eventList;
}
public post(String json) {
if (null == this.eventList || this.eventList.isEmpty()) {
throw new ServiceUnavailableException("An Recorder is either not configured");
}
}
}
Скрыть статический вызов метода внутри другого класса и внедрить экземпляр этого класса в post()
или класскоторый содержит post()
.Например:
public class RecorderFactory {
public EventList get() {
return Recorder.getRecorders();
}
}
public class TheOneThatContainsThePostMethod {
private RecorderFactory recorderFactory;
public TheOneThatContainsThePostMethod(RecorderFactory recorderFactory) {
this.recorderFactory = recorderFactory;
}
public post(String json) {
EventList list = recorderFactory.getRecorders();
...
}
}
// Or ...
public post(String json, RecorderFactory recorderFactory) {
EventList list = recorderFactory.getRecorders();
...
}
При первых двух подходах ваш тест может просто вызвать post()
, предоставляя (1) ноль EventList
;(2) пустой EventList
... тем самым позволяя вам протестировать поведение «выбросить 503 исключение».
При третьем подходе вы можете использовать Mockito, чтобы высмеивать поведение RecorderFactory
для возврата(1) ноль EventList
;(2) пустое EventList
... что позволяет вам проверить поведение «выбросить 503 исключение».