square / retrofit

A type-safe HTTP client for Android and the JVM
https://square.github.io/retrofit/
Apache License 2.0
43.01k stars 7.3k forks source link

MockRestAdapter crash with Observer #935

Closed danielgomezrico closed 9 years ago

danielgomezrico commented 9 years ago

Related to this question http://stackoverflow.com/questions/31189159/mock-retrofit-service-with-mockito

Mocked service:

public class MockCustomerService implements CustomerService {

    @Override
    public Observable<Session> createSession(@Body Credential credential) {
        return Observable.just(createSession());
    }

    private static Session createSession() {
        return new Session("token");
    }
}

This is the real one:

public interface CustomerService {
  @POST("url")
  Observable<Session> createSession(@Body Credential credential);
}

Then I try to mockit in @Before method:

MockRestAdapter mockRestAdapter = MockRestAdapter.from(ApiManager.REST_ADAPTER);
        Customer.SERVICE = mockRestAdapter.create(CustomerService.class, new MockCustomerService());

But I get:

java.lang.NoSuchMethodError: rx.schedulers.Schedulers.from
at retrofit.MockRestAdapter$MockRxSupport.<init>(MockRestAdapter.java:476)
at retrofit.MockRestAdapter$MockHandler.invoke(MockRestAdapter.java:260)
at $Proxy1.createSession(Native Method)
at co.nullindustries.pickup.api.rest.customer.Customer.login(Customer.java:103)
at com.pickupnow.customer.activity.LoginActivity.lambda$performLogin$0(LoginActivity.java:115)
at com.pickupnow.customer.activity.LoginActivity.access$lambda$0(LoginActivity.java)
at com.pickupnow.customer.activity.LoginActivity$$Lambda$1.call(Unknown Source)
at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
at com.pickupnow.customer.model.push_notification.PushManager$2.done(PushManager.java:60)
at com.pickupnow.customer.model.push_notification.PushManager$2.done(PushManager.java:50)
at com.parse.ParseTaskUtils$1.done(ParseTaskUtils.java:66)
at com.parse.ParseTaskUtils$1.done(ParseTaskUtils.java:63)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:107)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:467)
at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:408)
at android.support.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:226)
at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:138)
at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:118)
at android.support.test.espresso.action.Tap.sendSingleTap(Tap.java:135)
at android.support.test.espresso.action.Tap.access$100(Tap.java:35)
at android.support.test.espresso.action.Tap$1.sendTap(Tap.java:40)
at android.support.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:98)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5694)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)

Is there something that I´m doing wrong? should I use MockRestAdapter manually? There´s no doc about how to use it and looks dangerous O_O

Thanks

danielgomezrico commented 9 years ago

Adding this lines to proguard it worked.

-keep class rx.** { *; }
-keepclassmembers class rx.xxxx { public *; }