如何对RxJava Completable doOnSuccess函数进行单元测试?

时间:2018-09-03 00:47:37

标签: unit-testing junit rx-java

我已经看到了如何使用TestSubscriber测试可观察性,但是我不知道如何测试Completable.doOnSuccess回调。具体来说就是这种方法:

fun setAuthToken(authToken: AuthToken): Completable {
    this.authToken = authToken

    return Completable.fromSingle<User>(api
            .getCurrentUser()
            .doOnSuccess {
                user = it
            })
}

1 个答案:

答案 0 :(得分:1)

这完全不需要与RxJava测试订阅者一起测试(取决于其余代码)。

记住-您不想测试内部状态,或者至少不要做得尽可能少。内部状态和类结构可以更改,并且可能会经常更改。因此,检查用户是否分配给该字段是不明智的做法。

因此,您可以阻塞Completable,然后声明(称为“服务器”)服务器类的状态,但是我极力劝阻这样做: / strong>

server.setAuthToken(AuthToken("token"))
            .blockingAwait()
assertThat(server.user, equalTo(expectedUser))

您要测试的是行为。

您可能不会仅仅为了拥有一些字段而将用户分配给该字段。您正在做此事以稍后使用用户的信息。因此,首先您应该调用setAuthToken和然后真正使用用户信息的调用函数。然后,您可以断言所使用的信息是否正确并且来自正确的用户。

因此示例测试(取决于类)可能如下所示:

server.setAuthToken(AuthToken("token"))
        .andThen(server.sendRequest())
        .blockingAwait()
    // assert if correct user info was sent

server.setAuthToken(AuthToken("token"))
    .andThen(server.sendRequest())
    .test()
    // assert if correct user info was sent