I am working with MVP+RxJava and I want to create tests to verify if the API is working correctly and if the messages are being displayed. But I am getting the exception:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
ScalarSynchronousObservable cannot be returned by getApi()
My code:
public class CarService {
private static final String CARSERVER_URL = "URL";
private CarApi mCarApi;
public CarService() {
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Accept", "application/json");
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(USER_SERVER_URL )
.setRequestInterceptor(requestInterceptor)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
mCarApi = restAdapter.create(CarApi.class);
}
public CarApi getApi() {
return mCarApi;
}
public interface CarApi {
@GET("/cars")
public Observable<List<Car>>
getCars();
}
}
public class MyPresenter {
public void loadCars(){
mView.showProgress();
mCar.getApi()
.getCars()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Car>>() {
@Override
public void onCompleted() {
mView.hideProgress();
}
@Override
public void onError(Throwable e) {
mView.showCantFetchApiError(R.string.error_cant_fetch_api);
}
@Override
public void onNext(List<Car> cars) {
mView.displayCars(cars);
}
});
}
MyTest Class:
@RunWith(MockitoJUnitRunner.class)
public class ListPresenterTest {
@Before
public void setUp() throws Exception {
mUserService = Mockito.spy(new UserService());
mUserPresenter = new ListPresenter(mListUserView, mUserService);
// Override RxJava schedulers
RxJavaHooks.setOnIOScheduler(new Func1<Scheduler, Scheduler>() {
@Override
public Scheduler call(Scheduler scheduler) {
return Schedulers.immediate();
}
});
RxJavaHooks.setOnComputationScheduler(new Func1<Scheduler, Scheduler>() {
@Override
public Scheduler call(Scheduler scheduler) {
return Schedulers.immediate();
}
});
RxJavaHooks.setOnNewThreadScheduler(new Func1<Scheduler, Scheduler>() {
@Override
public Scheduler call(Scheduler scheduler) {
return Schedulers.immediate();
}
});
// Override RxAndroid schedulers
final RxAndroidPlugins rxAndroidPlugins = RxAndroidPlugins.getInstance();
rxAndroidPlugins.registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
}
@After
public void tearDown() throws Exception {
RxJavaHooks.reset();
RxAndroidPlugins.getInstance().reset();
}
@Test
public void shouldApiWorking() throws Exception {
when(mUserService.getApi().getUsers()).thenReturn(rx.Observable.just(Collections.<User>emptyList()));
// already tried this:
// doReturn(rx.Observable.just(Collections.<User>emptyList())).when(mUserService.getApi().getUsers());
mUserPresenter.getUsers();
verify(mListUserView).showNoUsersError(R.string.error_no_users);
}
}
Aucun commentaire:
Enregistrer un commentaire