一个单元将如何测试api调用方法(rxjava + retrofit)?

时间:2019-05-08 07:30:51

标签: unit-testing retrofit2 rx-android

我正在尝试对通过改造和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

1 个答案:

答案 0 :(得分:0)

您需要手动触发事件发射。为此,您需要调用

方法

.blockingFirst() 要么 .blockingGet()

取决于您使用的可观察类型。 因此,您必须添加

call.blockingGet()

在getLatestTransactions方法的末尾,或者此方法应返回在测试方法内部创建的observable和调用阻塞。