Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mockito-rxjava2-verify调用_Java_Android_Mockito_Rx Java2 - Fatal编程技术网

Mockito-rxjava2-verify调用

Mockito-rxjava2-verify调用,java,android,mockito,rx-java2,Java,Android,Mockito,Rx Java2,是否可以使用Mockito验证对可观察对象的调用 我的用例类: public class Foo { private Bar bar; public Foo(Bar bar) { this.bar = bar; } Completable execute() { return bar.method1() .andThen(bar.method2()) .andTh

是否可以使用Mockito验证对可观察对象的调用

我的用例类:

public class Foo {

    private Bar bar;

    public Foo(Bar bar) {
        this.bar = bar;
    }

    Completable execute() {
        return bar.method1()
                .andThen(bar.method2())
                .andThen(bar.method3());
    }
}
我的依亲班级:

interface Bar {
    Completable method1();
    Completable method2();
    Completable method3();
}
现在是我的测试课:

@Mock private Bar bar;
@InjectMocks private Foo foo;

@Test
public void test() throws Exception {
    when(bar.method1()).thenReturn(complete());
    when(bar.method2()).thenReturn(error(new Exception()));
    when(bar.method3()).thenReturn(complete());

    foo.execute()
            .test()
            .assertError(Exception.class);

    verify(bar, times(1)).method1();
    verify(bar, times(1)).method2();
    verify(bar, times(1)).method3(); // <-- this is important part
}

“方法3”日志将不会在生产代码中执行。

执行检测时,需要使用与生产代码相同的延迟返回值的方法

AtomicBoolean m3Run = new AtomicBoolean(false);
...
when(bar.method3()).thenReturn(Completable.fromAction(() -> m3Run.set(true));
然后,您的测试可以检查
m3Run
的值是否为
false
,因为除非订阅了completable,否则不会运行它

AtomicBoolean m3Run = new AtomicBoolean(false);
...
when(bar.method3()).thenReturn(Completable.fromAction(() -> m3Run.set(true));