我在模拟一个RxJava函数时会遇到一些麻烦,它会产生一些HTTP调用。我正在使用JUnit和Mockito。模拟RxJava异步http调用
//Customer.java extends ServiceManager
public Observable<String> getCustomerDetails(String uuidData){
String api = "http://someapi.com/" + uuidData;
return callHttps(api, getHeader(),
"",
HttpMethod.GET)
.doOnError(failure -> logger.error("Error was raised while calling Profile Save of ORCH API:"
+ failure.getMessage()))
.doOnNext(httpClientResponse -> {
logger.info("");
})
.concatMap(RxHelper::toObservable)
.reduce(Buffer.buffer(), Buffer::appendBuffer)
.map(buffer -> buffer.toString("UTF-8"))
.map(entries -> entries);
}
private MultiMap getProfileHeader(){
MultiMap headers = MultiMap.caseInsensitiveMultiMap();
headers.add("Accept","application/json");
return headers;
}
public class ServiceManager {
@Inject
@Named("httpsClient")
private HttpClient httpsClient;
private static final Logger logger = LoggerFactory.getLogger(ServiceManager.class);
public Observable<HttpClientResponse> callHttps(String url, MultiMap headers, String body, HttpMethod httpMethod) {
return Observable.create(subscriber -> {
HttpClientRequest httpClientRequest = httpsClient.requestAbs(httpMethod, url);
httpClientRequest.exceptionHandler(event -> {
logger.error("Exception was raised :" + event.getMessage());
});
httpClientRequest.headers().addAll(headers);
RxHelper
.toObservable(httpClientRequest)
.subscribe(subscriber);
httpClientRequest.end(body);
});
}
}
如何嘲笑callHttps
功能,使其返回我HttpClientRequest
嘲笑回应。对我来说另一种方法是使用WireMock,但我想通过嘲笑上面的函数来找到一种方法。
在我们的项目中,我们创建了真正的模拟服务,以证明精确的实时延迟以及可能的通信问题。据我所知,Mockito不能创建请求,它只会嘲笑。 – paul
除了扩展ServiceManager之外,您可能更愿意将其作为字段包含进来,然后使用依赖注入来注入ServiceManager的模拟实现,从而为您提供伪造的http响应。 –