Test Observable.FlatMap Mockito



我一直在互联网上寻找,但没有找到解决方案(UnitTest和Mockito上的新功能(

是否可以测试返回服务调用的方法并在返回之前操纵其结果?例;

public Observable<Reports> getUserReports(Integer userId) {
    return serviceClient
        .getReports(userId)
        .flatMap(serviceReports -> {
            System.out.println("Testing inside flatMap"); <- never reach this line therefore duno if methods down here are invoked and work perfectly
            final Observable<List<Report>> reports = getPendingReports(userId, serviceReports);
            //More methods that modify/update information
            return zip(observable1, observable2, observable3
                (report1, report2, report3) -> {
                    updateReports(otherArguments, report1, report2, report3);
                    return serviceReports;
                });
        });
}

到目前为止,我已经尝试过;

@Test
public void myTest(){
        when(serviceClient
            .getReports(anyInt()))
            .thenReturn(Observable.just(reports));
        Observable<Reports> result = mocketClass.getUserReports(userId)
}

尝试过间谍和模拟,但到目前为止没有运气。任何提示或帮助都会很棒。

要模拟getReports()行为,您需要首先模拟serviceClient并将其传递到服务类中。

举个例子:

@Test
public void myTest(){
    // Given
    final ServiceClient mockedServiceClient = Mockito.mock(ServiceClient.class);
    when(mockedServiceClient
        .getReports(anyInt()))
        .thenReturn(Observable.just(reports));
    // and create an instance of your class under testing with injected mocked service client.
    final MyUserService userService = new MyUserService();
    userService.setServiceClient(mockedServiceClient);
    // When run a method under test
    Observable<Reports> actualResult = userService.getUserReports(userId)
    // Then
    // actualResult to be verified.
}

相关内容

  • 没有找到相关文章

最新更新