测试用例 运行 时不调用 Rx onErrorReturn

Rx onErrorReturn is not called when test case run

我有

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() returns 出错,然后调用 getTheSameEntityIfError(id)。 我希望 onErrorReturn 操作会被调用,但它总是抛出 NotFoundExceptiononErrorReturn 从未被调用。

知道哪里出了问题吗?

你模拟 client.getPayment() 抛出而不是 returning 一些 RxJava 可以使用的东西,因此 RxJava 甚至不参与这种情况。使 client.getPayment return 成为 Single.error().