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

时间:2019-07-10 08:08:36

标签: 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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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