RxJava2 JUnit 测试
RxJava2 JUnit testing
我在对 RxJava 代码部分进行单元测试时遇到了一些麻烦。我想测试下面的方法。它是一种演示方法。
public void onSearchQueryChanged(String searchQuery) {
backendService.getShopResultsCount(searchQuery)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (isViewAttached()) {
getView().hideShopSearchInProgress();
getView().displayShopSearchResultCount(result.getSearchResponse().getNumberOfHits());
}
}, error -> {
if (isViewAttached()) {
getView().hideShopSearchInProgress();
}
});
}
在最好的情况下,我想模拟 backendService
并针对特定搜索查询和 attached/detached 视图测试此用例。
我做了一些研究,我知道 toBlocking()
和 test()
方法。他们都假设我有 Observable
可用。我想我必须以某种方式拆分该方法。您对此有何看法?
我的技术栈:RxJava2、dagger、MVP。
在我们的项目中,我们编写如下代码:
Mockito.when(backendService.getShopResult(Mockito.any())).thenReturn(Observable.just(Some Data)
您可以通过以下方式解决调度程序问题:
@Inject
Scheduler subscribeOn;
并在测试中通过 Schedulers.test()
或 Schedulers.immediate()
或者你不能将 TestRule
与 RxJavaPlugins.registerSchedulersHook()
一起使用
首先,如果这是一个真正的 MVP 项目,那么您应该以某种方式将 backendService
和 view
注入到 Presenter 中。所以你可以用 Mockito
来嘲笑他们。 提供了如何操作以及如何覆盖 Schedulers
.
当然你应该测试在控制backendService
行为时调用哪个视图方法。这是由 Mockito.verify(...)
完成的
您还可以使用 Mockito
的 ArgumentCaptor
来测试从 backendService.getShopResultsCount(searchQuery)
传递给 view
的输出
我在对 RxJava 代码部分进行单元测试时遇到了一些麻烦。我想测试下面的方法。它是一种演示方法。
public void onSearchQueryChanged(String searchQuery) {
backendService.getShopResultsCount(searchQuery)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (isViewAttached()) {
getView().hideShopSearchInProgress();
getView().displayShopSearchResultCount(result.getSearchResponse().getNumberOfHits());
}
}, error -> {
if (isViewAttached()) {
getView().hideShopSearchInProgress();
}
});
}
在最好的情况下,我想模拟 backendService
并针对特定搜索查询和 attached/detached 视图测试此用例。
我做了一些研究,我知道 toBlocking()
和 test()
方法。他们都假设我有 Observable
可用。我想我必须以某种方式拆分该方法。您对此有何看法?
我的技术栈:RxJava2、dagger、MVP。
在我们的项目中,我们编写如下代码:
Mockito.when(backendService.getShopResult(Mockito.any())).thenReturn(Observable.just(Some Data)
您可以通过以下方式解决调度程序问题:
@Inject
Scheduler subscribeOn;
并在测试中通过 Schedulers.test()
或 Schedulers.immediate()
或者你不能将 TestRule
与 RxJavaPlugins.registerSchedulersHook()
首先,如果这是一个真正的 MVP 项目,那么您应该以某种方式将 backendService
和 view
注入到 Presenter 中。所以你可以用 Mockito
来嘲笑他们。 Schedulers
.
当然你应该测试在控制backendService
行为时调用哪个视图方法。这是由 Mockito.verify(...)
您还可以使用 Mockito
的 ArgumentCaptor
backendService.getShopResultsCount(searchQuery)
传递给 view
的输出