我想测试我的演示者
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();
}
}
}
但是,我有很多疑问,测试它的最佳方法是什么
1)如果我要编写这4个测试场景,这是否正常
shouldShowContentWhenLoadFromRepository()
shouldShowErrorWhenLoadFromRepository()
shouldShowContentWhenLoadFromRemoteDatastore()
shouldShowErrorWhenLoadFromRemoteDatastore()
2)我应该为detachView(boolean retainInstance)编写测试并清除一次性用品
3)在我的案例中,哪种机制最适合测试RxJava?
答案 0 :(得分:0)
这些测试场景似乎合理。
让测试覆盖对象的公共表面通常是一种很好的做法,但考虑到detachView()
清除disposables
可能会很棘手{1}}。
您可以为MainPresenter
创建一个存根,在调用Repository
时返回一个Observable。您可以使用GetCountries()
&amp;创建成功和不成功的Observable。分别为Observable.return()
。
如果您需要更多地控制异步的具体时间,Observable.error()
会使其变得非常简单(seen
here)。