【问题标题】:How to test Retrofit2 + RxJava2 api call?如何测试 Retrofit2 + RxJava2 api 调用?
【发布时间】:2017-08-09 02:17:02
【问题描述】:

我想知道如何通过 rxjava2 测试 Retrofit2 调用。我的改造 api 界面如下所示:

public interface LoginApiMapping {
   @POST("v1/secm/oam/oauth2/token")
   Observable<Response<RestResponseHolder<LoginResponseModel>>> login(@Body LoginModel model);
}

我想编写一个测试,它将通过 RxJava2 发送这个请求并检查响应。我认为 RxJava 存在问题,因为它是异步的,并且测试在我得到响应之前完成,所以我尝试使用 TestSubscriber,如下所示,但无法订阅 TestSubscriber>>预计

@Test
public void loginTest(){
    Context appContext = InstrumentationRegistry.getTargetContext();
    Api t = TestApi.create(appContext);
    LoginModel loginModel = new LoginModel("username","password");
    TestSubscriber<Response<RestResponseHolder<LoginResponseModel>>> testSubscriber = new TestSubscriber<>();
    t.get(LoginApiMapping.class).login(loginModel).subscribe(testSubscriber);
}

谁解决了这个问题?谢谢

【问题讨论】:

    标签: android api unit-testing retrofit2 rx-java2


    【解决方案1】:

    在测试结束时添加:

    testSubscriber.awaitTerminalEvent();
    

    然后你可以检查testSubscriber上的各种断言。

    【讨论】:

    • 非常感谢您的回复,我认为它会很有用,但首先我需要能够订阅 TestSubscriber>> 这是不可能的。也许它可能在通用性方面存在一些问题?在此示例中,fedepaol.github.io/blog/2015/09/13/… 似乎与对象 RubberChicken 一起工作。也许是因为 RxJava2?当我尝试订阅我的对象时,我什至无法编译它。
    【解决方案2】:

    我终于找到了解决方案,所以我决定在这里发布。 首先,您必须在 observable 上调用 toFlowable() 并设置 Backpressure 策略,然后您可以使用 TestSubscriber 订阅,如下所示

    t.get(LoginApiMapping.class).login(loginModel).toFlowable(BackpressureStrategy.DROP).subscribe(testSubscriber);
    

    然后添加

    testSubscriber.awaitTerminalEvent();
    

    最后,您可以检查 testSubscriber 上的各种断言,正如 R. Zagórski 在上面的回答中指出的那样。

    【讨论】:

      【解决方案3】:

      您使用带有 Flowable 的 TestSubscriber 和带有 Observable 的 TestObserver。您可以通过将 Single、Completable 和 Maybe 转换为 Flowable 或 Observable 来测试它们,但是这三个的内置 test() 会返回 TestSubscriber。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2016-06-03
        • 1970-01-01
        • 2019-06-02
        • 2017-05-09
        • 1970-01-01
        相关资源
        最近更新 更多