Java 8 测试可观察的.FlatMap Mockito

Java 8 测试可观察的.FlatMap Mockito,java-8,mockito,rx-java,Java 8,Mockito,Rx Java,我一直在网上搜索,但还没有找到解决方案(UnitTest和Mockito上新增) 是否可以测试一个方法,该方法返回一个服务调用,并在返回它之前操纵它的结果?榜样 public Observable<Reports> getUserReports(Integer userId) { return serviceClient .getReports(userId) .flatMap(serviceReports -> {

我一直在网上搜索,但还没有找到解决方案(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;
                });

        });
}
公共可观察的getUserReports(整数用户ID){
返回服务客户端
.getReports(用户ID)
.flatMap(服务报告->{
System.out.println(“内部平面图测试”){
更新报告(其他参数、报告1、报告2、报告3);
返回服务报告;
});
});
}
到目前为止我已经试过了

@Test
public void myTest(){
        when(serviceClient
            .getReports(anyInt()))
            .thenReturn(Observable.just(reports));

        Observable<Reports> result = mocketClass.getUserReports(userId)
}
@测试
公共无效myTest(){
何时(serviceClient)
.getReports(anyInt()))
.然后返回(可观察的、公正的(报告));
可观察结果=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.
}
@测试
公共无效myTest(){
//给定
最终ServiceClient mockedServiceClient=Mockito.mock(ServiceClient.class);
何时(mockedServiceClient)
.getReports(anyInt()))
.然后返回(可观察的、公正的(报告));
//并使用注入的模拟服务客户端创建正在测试的类的实例。
final MyUserService userService=new MyUserService();
userService.setServiceClient(mockedServiceClient);
//当运行测试中的方法时
可观察的actualResult=userService.getUserReports(用户ID)
//然后
//实际结果有待验证。
}