Unit testing RxJava和mockito单元测试
我想测试我的演讲者Unit testing RxJava和mockito单元测试,unit-testing,mockito,tdd,rx-java,mosby,Unit Testing,Mockito,Tdd,Rx Java,Mosby,我想测试我的演讲者 public class MainPresenter extends MvpBasePresenter<MainView> { private Repository repository; private final CompositeDisposable disposables = new CompositeDisposable(); public void setRepository(Repository repository)
public class MainPresenter extends MvpBasePresenter<MainView> {
private Repository repository;
private final CompositeDisposable disposables = new CompositeDisposable();
public void setRepository(Repository repository) {
this.repository = repository;
}
public void loadFromRepository() {
getView().showLoading(false);
disposables.add(repository.getCountries()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribeWith(new DisposableObserver<List<Country>>() {
@Override
public void onNext(List<Country> countries) {
if (isViewAttached()) {
getView().setData(countries);
getView().showContent();
}
}
@Override
public void onError(Throwable e) {
if (isViewAttached()) {
getView().showError(e, false);
}
}
@Override
public void onComplete() {
}
}));
}
public void loadFromRemoteDatastore() {
disposables.add(new RemoteDataStore().getCountries()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribeWith(new DisposableObserver<List<Country>>() {
@Override
public void onNext(List<Country> countries) {
if (isViewAttached()) {
getView().setData(countries);
getView().showContent();
}
}
@Override
public void onError(Throwable e) {
if (isViewAttached()) {
getView().showError(e, false);
}
}
@Override
public void onComplete() {
}
}));
}
@Override
public void detachView(boolean retainInstance) {
super.detachView(retainInstance);
if (!retainInstance) {
disposables.clear();
}
}
}
2) 我应该为detachView(布尔保留)和clear disposables编写测试吗
3) 在我的例子中,什么样的机制最适合测试RxJava
MainPresenter
的当前实现,测试detachView()
清除可处置的
可能很棘手Repository
创建存根,当调用GetCountries()
时,该存根返回一个可观察的返回值。您可以分别使用Observable.return()
和Observable.error()
来创建成功和失败的可观察对象如果您需要更多地控制异步的特定时间,
TestScheduler
使它变得非常简单。您的MainPresenter是否有任何非无效的外部方法?如果您想测试演示者的行为,您需要一个事件流,如LoadingDataFailedEvent,如果模拟存储库返回Obs.error(),您可以从外部订阅并测试它。谢谢您的回答,Hans。我发布了我的整个演示者,我只有无效的方法。老实说,我不明白。顺便问一下,您是否可以编写示例代码,发布任何开源代码或文章的链接来解释您的意思?
shouldShowContentWhenLoadFromRepository()
shouldShowErrorWhenLoadFromRepository()
shouldShowContentWhenLoadFromRemoteDatastore()
shouldShowErrorWhenLoadFromRemoteDatastore()