java - onErrorReturn rx java 中的断言不会失败

标签 java unit-testing junit rx-java vert.x

我有以下代码:

public Single<Post> doSomething(Post post) {
    String endPoint = "some-url";
    JsonObject payload = new JsonObject().put("message", post.getPost());
    return oAuth.rxApi(HttpMethod.POST, endPoint, payload)
            .map(r -> {
                post.setPostId(r.getString("id"));
                post.setStatus(PostStatus.PROCESSED);
                return post;
            }).onErrorReturn(e -> {
                post.setStatus(PostStatus.FAILED);
                post.setError(e.getMessage());
                return post;
            });
}

我已经为其编写了以下测试用例。

@Test
public void shouldHandleFailureWhilePosting() {
    Post post = new Post();
    post.setSocialAccountID("1234");
    post.setAccessToken("ABC");
    post.setPost("Some post to share!!!");

    String shareEndPoint = "some-url";
    JsonObject sharePayload = new JsonObject().put("message", post.getPost());
    when(oAuth2Auth.rxApi(HttpMethod.POST, shareEndPoint, sharePayload)).thenReturn(Single.error(new NoStackTraceThrowable("Error")));

    service.doSomething(post)
            .subscribe(postResponse -> {
                assert postResponse.getError().equals("Errorssss");
                assert postResponse.getAttachedMedia() == null;
                assert postResponse.getPostId() == null;
                assert postResponse.getStatus().equals(PostStatus.FAILED);
            });
}

现在我在这种情况下的断言总是成立。即使我做出错误的断言,它也始终是绿色的。

最佳答案

断言是在可观察链的上下文中执行的,并且无法从测试中直接访问。

而是使用 TestSubscriber 来订阅可观察链。它有很多断言。

关于java - onErrorReturn rx java 中的断言不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514388/

相关文章:

java - 如何解决不必要的 stub 异常

java - 为什么 JUnit 只在第一次失败之前运行 Theory 的测试用例?

java - Spring中如何模拟私有(private)方法中调用的公共(public)方法的返回

java - 初始化字符串与连接字符串不同,但打印时结果相同

java - 支柱2 : Send a JSON string with JQuery ajax submit to be mapped into a List of complextypes

Java:如何将 InputStream 转换为 GZIPInputStream?

java - Kotlin/Java - 测试数据库数据提供的 REST API

python - 如何从 django_nose 覆盖范围中排除代码的特定部分

java - 在 JUnit 测试中使用 JMockit 多次模拟静态方法

java - 在 Tomcat 7 上部署 JSP Web 应用程序(通过带有 GIT 的 OpenShift)