【发布时间】:2016-08-12 01:30:22
【问题描述】:
我有一个想要使用 Mockito 模拟的 HystrixObservableCommand:
public class LoginWithEmailCommand extends HystrixObservableCommand<Boolean> {
// stuff...
}
使用如下所示的测试:
@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
@Mock
Observable<Result> mockObs;
@Test
public void mockwtf() {
LoginWithEmailCommand cmd = mock(LoginWithEmailCommand.class);
when(cmd.toObservable()).thenReturn(mockObs);
cmd.toObservable();
}
}
但是,运行此测试会导致 NullPointerException:
java.lang.NullPointerException 在 com.netflix.hystrix.AbstractCommand.toObservable(AbstractCommand.java:342) 在 com.netflix.hystrix.HystrixObservableCommand.toObservable(HystrixObservableCommand.java:35)
为什么真正的 .toObservable() 不断被调用?设置断点表明正在创建的 LoginWithEmailCommand 对象是生成的代理对象...
另一个线索:如果我将此覆盖添加到 ObservableCommand 中,则可以模拟:
@Override
public Observable<Boolean> toObservable() {
return super.toObservable();
}
...有没有比放置未使用的 toObservable 覆盖更清洁的方法来完成这项工作?
【问题讨论】:
标签: unit-testing mockito observable hystrix