@Override public void onBarcodeReceived(final String barcode) {
view.showProgress();
if (!textUtil.isEmpty(barcode)) {
subscriptions.add(
interactor.getSearchResultByBarcode(barcode).subscribe(subscriberForSearchResults(true)));
}
}
private Subscriber<PriceAndStockActivityViewModel> subscriberForSearchResults(
boolean fromBarcode) {
return new BaseSubscriber<PriceAndStockActivityViewModel>() {
@Override public void onNext(PriceAndStockActivityViewModel priceAndStockActivityViewModel) {
super.onNext(priceAndStockActivityViewModel);
view.updateView(priceAndStockActivityViewModel);
}
@Override public void onError(Throwable e) {
super.onError(e);
view.hideProgress();
view.organizeScreenComponentsByVisibility(true);
view.onError(e);
}
};
}
Ich wollte schreiben Methode testen genannt onBarcodeReceived wie unterWie Unit-Test für RxJava CompositeSubscription
@Test public void should_updateViewByViewModel_when_AnyBarcodeReceived() {
String barcode = "123123123";
PriceAndStockActivityViewModel viewModel = getPriceAndStockActivityViewModel(barcode);
when(textUtil.isEmpty(barcode)).thenReturn(false);
when(interactor.getSearchResultByBarcode(anyString())).thenReturn(Observable.just(viewModel));
presenter.onBarcodeReceived(barcode);
verify(view).showProgress();
verify(interactor).getSearchResultByBarcode(anyString());
verify(view).updateView(any(PriceAndStockActivityViewModel.class));
}
Da OnNext in einem anderen Thread läuft seinen normalen nicht view.updateView zu erreichen. Es sieht einfach aus, aber ich konnte es nicht lösen. Gibt es eine Möglichkeit, updateView zu verifizieren?
Ich stimme für das Schließen dieser Frage als Off-Thema, weil eigentlich meine Implementierung korrekt war, aber es gab andere Fehler wegen mir. keine Beziehung mit dem Code. Leute können verwirren, die Frage rot zu haben. Bitte lösche es. –