一种想法是,您应该仅对公开课进行单元测试.因此,只需对您从insert()返回的ResponseObject进行断言即可.
否则,使用类似Mockito的模拟框架,您可以将callBackendService()方法分解为它自己的类(例如ServiceCaller).然后,您可以创建一个模拟ServiceCaller对象,并验证传递给它的参数.
像这样
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;
}
}
最后,Mockito测试就是这样……
@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);
}
为了简洁起见,我省略了使用Interfaces等的良好设计,但是您会明白的.