一个单元测试api如何调用方法(rxjava+retrofit)?
How would one unit test api call method (rxjava+retrofit)?
我正在尝试对使用改造和 rxjava 进行的 api 调用进行单元测试。
为此,我正在模拟 api 调用对象,但 api 调用订阅者不会触发其 onNext 方法。
ApiCallsTest.java:
//自定义对象替换api调用响应对象
Observable<FastRechargeClass[]> apiObservable = Observable.just(fastRechargeList);
InterfaceAPI api = mock(InterfaceAPI.class);
when(retrofitApi.getApiInterface(context)).thenReturn(api); when(api.getLatestTransactions("token")).thenReturn(apiObservable);
apiCalls.getLatestTransactions("token",context);
ApiCalls.java:
public void getLatestTransactions(String token, final Context context) {
String methodName = "getLatestTransactions";
InterfaceAPI api = retrofitApi.getApiInterface(context);
Observable<FastRechargeClass[]> call = api.getLatestTransactions(token);
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<FastRechargeClass[]>() {
@Override
public void onSubscribe(Disposable d) {
WriteLog.print("onSubscribe");
}
@Override
public void onNext(FastRechargeClass[] fastRechargeClasses) {
fastRechargeManager.runUpdateFastRechargeDb(fastRechargeClasses);
}
@Override
public void onError(Throwable e) {
logOnFailureRequests(methodName, e.getMessage());
}
@Override
public void onComplete() {
}
});
}
When running test
onSubscribe is being called and it stops
您需要手动触发事件发射。为此,您需要调用方法
.blockingFirst()
要么
.blockingGet()
取决于您使用的可观察类型。
所以你必须添加
call.blockingGet()
在 getLatestTransactions 方法的末尾或此方法应该 return 在测试方法中创建可观察对象并调用阻塞获取。
我正在尝试对使用改造和 rxjava 进行的 api 调用进行单元测试。 为此,我正在模拟 api 调用对象,但 api 调用订阅者不会触发其 onNext 方法。
ApiCallsTest.java:
//自定义对象替换api调用响应对象
Observable<FastRechargeClass[]> apiObservable = Observable.just(fastRechargeList);
InterfaceAPI api = mock(InterfaceAPI.class);
when(retrofitApi.getApiInterface(context)).thenReturn(api); when(api.getLatestTransactions("token")).thenReturn(apiObservable);
apiCalls.getLatestTransactions("token",context);
ApiCalls.java:
public void getLatestTransactions(String token, final Context context) {
String methodName = "getLatestTransactions";
InterfaceAPI api = retrofitApi.getApiInterface(context);
Observable<FastRechargeClass[]> call = api.getLatestTransactions(token);
call.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<FastRechargeClass[]>() {
@Override
public void onSubscribe(Disposable d) {
WriteLog.print("onSubscribe");
}
@Override
public void onNext(FastRechargeClass[] fastRechargeClasses) {
fastRechargeManager.runUpdateFastRechargeDb(fastRechargeClasses);
}
@Override
public void onError(Throwable e) {
logOnFailureRequests(methodName, e.getMessage());
}
@Override
public void onComplete() {
}
});
}
When running test
onSubscribe is being called and it stops
您需要手动触发事件发射。为此,您需要调用方法
.blockingFirst()
要么
.blockingGet()
取决于您使用的可观察类型。 所以你必须添加
call.blockingGet()
在 getLatestTransactions 方法的末尾或此方法应该 return 在测试方法中创建可观察对象并调用阻塞获取。