mardi 14 juillet 2015

mockito AbstractMethodError on initMocks

So I've been struggling pretty much all day trying to get mockito to work for my android project. I added everything to my gradle build file:

androidTestCompile 'org.mockito:mockito-core:2.0.29-beta'
androidTestCompile "junit:junit:4.12-beta-3"
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'

and have tried running a test that doesn't really do anything:

@RunWith(MockitoJUnitRunner.class)
public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

private LoginActivity loginActivity;

private EditText et_email;
private EditText et_password;
private Button btn_login;

@Mock
SpiceManager manager;

public LoginActivityTest(){
    super(LoginActivity.class);
}

@Override
public void setUp() throws Exception {
    super.setUp();
    loginActivity = getActivity();

    MockitoAnnotations.initMocks(this);
    //manager = mock(SpiceManager.class);
    loginActivity.spiceManager = manager;

    et_email = (EditText) loginActivity.findViewById(R.id.et_email);
    et_password = (EditText) loginActivity.findViewById(R.id.et_password);
    btn_login = (Button) loginActivity.findViewById(R.id.btn_login);

}

@Override
public void tearDown() throws Exception {
    super.tearDown();
}

public void testLoginEmpty() throws Exception {        
    verify(manager).execute(any(LoginRequest.class), anyString(), anyLong(), any(LoginActivity.LoginRequestListener.class));
}

}

The reason I want to mock the service is because I would like to keep the network part ouf the test. There's no need to actually send a network request for a simple test, right?

Anyhow, the app builds but when the actual test starts running it fails (or rather crashes) with an AbstractMethodError:

Running tests
Test running started
java.lang.AbstractMethodError: abstract method     "org.mockito.plugins.MockMaker$TypeMockability         org.mockito.plugins.MockMaker.isTypeMockable(java.lang.Class)"
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidat    or.java:21)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImp    l.java:167)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:58)
at org.mockito.Mockito.mock(Mockito.java:1410)
at org.mockito.Mockito.mock(Mockito.java:1288)
at be.sanmax.membr.activities.LoginActivityTest.setUp(LoginActivityTest.java:50)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)

Finish

This strikes me as odd since the spiceManager class does not contain any abstract methods. It is, however, part of some package that I didn't write (com.octo.android.robospice). But that shouldn't be an issue. Should it?

And if that is the issue, how could I go about factoring it out from any tests? I only want to test the working of the app, not the network connection...

Aucun commentaire:

Enregistrer un commentaire