java - 测试用例运行时不会调用 Rx onErrorReturn

标签 java junit mocking mockito rx-java

我有

public Single<APIResponse> getPayment(Identity identity, String id) {
    return client.getPayment(identity, id).onErrorReturn(__ -> getTheSameEntityIfError(id));
}

client 是一个调用外部服务的网络服务客户端 如果 client.getPayment 返回任何错误,它将调用 getTheSameEntityIfError(id)

我正在尝试编写一个测试用例来覆盖此方法

@RunWith(MockitoJUnitRunner.class)
public class AdapterTest {

    @Mock
    PaymentsClient client;

    @InjectMocks
    Adapter adapter;

    Identity identity = testIdentity();
    PaymentEntity payment = testPayment();

    @Test
    public void getPayment() {
        when(client.getPayment(any(), any())).thenThrow(new NotFoundException());
        APIResponse apiResponse = adapter.getPayment(identity, "id").blockingGet();
        assertThat(payment.getId(), equalTo(apiResponse.getId(1)));
    }
}

在这种情况下,我想模拟外部服务 client.getPayment() 返回错误,然后调用 getTheSameEntityIfError(id)。 我预计将调用 onErrorReturn 操作,但它总是抛出 NotFoundException 并且 onErrorReturn 从未被调用。

知道出了什么问题吗?

最佳答案

您模拟 client.getPayment() 来抛出而不是返回 RxJava 可以使用的东西,因此 RxJava 甚至不参与这种情况。使 client.getPayment 返回 Single.error()

关于java - 测试用例运行时不会调用 Rx onErrorReturn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56966169/

相关文章:

java - 断言检查字符串只包含数值

java - JUnit @Parameterized 函数在测试套件中的@BeforeClass 之前运行?

c# - 没有指定输入参数的 Moq 模拟方法

c# - 模拟的 UserManager 在测试中并没有真正按预期工作

python - 从进口模拟进口

java - 使用 Weka 在 Java 中进行文档聚类

java - 使用 Flexjson 更改属性名称

java - `public <T extends Number> T method( Integer x ) {...}` 可以接受扩展 Integer 类型的输入吗?

java - 是否可以在javascript中直接调用Pubsub的订阅拉取,而不是调用java方法来获取数据?

java - @Value 在 junit 5 中为 null