Mockito-rxjava2-verify调用
是否可以使用Mockito验证对可观察对象的调用 我的用例类: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
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));