RxAndroid – java.lang.IllegalStateException:已经注册了另一个策略
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RxAndroid – java.lang.IllegalStateException:已经注册了另一个策略,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1729字,纯文字阅读大概需要3分钟。
内容图文
![RxAndroid – java.lang.IllegalStateException:已经注册了另一个策略](/upload/InfoBanner/zyjiaocheng/827/d9dffec273a94420ae4d333ef7d85711.jpg)
我正在编写一个单元测试,需要模拟一个Observable(来自改造)
测试组件中的代码如下:
getApiRequestObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(...)
在单元测试中(针对JVM,因此AndroidSchedulers不可用)我需要使它全部同步,所以我的测试将如下所示:
@Test
public void testSomething() {
doReturn(mockedResponse).when(presenter).getApiRequestObservable();
presenter.callApi();
verify(object,times(1)).someMethod();
}
为此,我应该在setUp()方法中注册钩子:
@Before
public void setUp() throws Exception {
// AndroidSchedulers.mainThread() is not available here so we fake it with this hook
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
// We want synchronous operations
RxJavaPlugins.getInstance().registerSchedulersHook(new RxJavaSchedulersHook(){
@Override
public Scheduler getIOScheduler() {
return Schedulers.immediate();
}
});
}
但这引发了上述异常,因为我显然不允许注册两个钩子.那有什么办法吗?
最佳答案:
问题是您没有重置测试状态 – 您可以通过运行单个测试来验证.要解决您的特定问题,您需要重置rx插件状态,如下所示:
@Before
public void setUp(){
RxJavaPlugins.getInstance().reset();
RxAndroidPlugins.getInstance().reset();
//continue setup
...
}
您甚至可以将重置包装到可重用的@Rule中,如Alexis Mas blog post所述:
public class RxJavaResetRule implements TestRule {
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
//before: plugins reset, execution and schedulers hook defined
RxJavaPlugins.getInstance().reset();
RxAndroidPlugins.getInstance().reset();
// register custom schedulers
...
base.evaluate();
}
};
}
}
内容总结
以上是互联网集市为您收集整理的RxAndroid – java.lang.IllegalStateException:已经注册了另一个策略全部内容,希望文章能够帮你解决RxAndroid – java.lang.IllegalStateException:已经注册了另一个策略所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。