Одна из идей заключается в том, что вы должны только проводить модульное тестирование ваших общедоступных занятий. Поэтому просто сделайте свои утверждения на ResponseObject
, который возвращается от insert()
.
В противном случае, используя макетную структуру, такую как Mockito, вы можете выделить метод callBackendService () в его собственный класс (например, ServiceCaller
). Затем вы можете создать фиктивный объект ServiceCaller и verfiy параметры, которые ему передаются.
Как то так ...
public class ServiceCaller {
public callBackendService(Request request, Response response) {
...
}
}
Тогда ваш класс должен выглядеть примерно так ...
public class MyService extends AbstractService {
private ServiceCaller serviceCaller;
public ResponseObject insert(SomeData data) {
Request request = createRequest(data);
Response response = new Response();
serviceCaller.callBackendService(request, response);
return createResponseObject(response);
}
public setServiceCaller(ServiceCaller caller) {
this.serviceCaller = caller;
}
}
И, наконец, тест Мокито выглядит примерно так ...
@Test
public void testInsert() throws Exception {
// object to test
MyService ms = new MyService();
// test input values
Request req = new Request();
Response resp = new Response();
// create a mock class and inject it into your test class
ServiceCaller sc = mock(ServiceCaller.class);
ms.setServiceCaller = sc;
// execute the method under test
ms.insert(req, resp);
// now you can see if your mock was called with the expected params
verify(sc).callBackendService(req, resp);
}
Для краткости я опустил хороший дизайн с использованием интерфейсов и т. Д., Но вы поймете, как это сделать.