Search code examples
androidjunitinstrumentationandroid-instrumentation

Android - Empty test suite (AbstractMethodError)


Here are the configurations in the build.gradle file:

testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') {
    exclude group: 'com.android.support', module: 'multidex'
}
androidTestCompile 'com.android.support:support-annotations:24.2.1'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.6.3'
androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.4.1'
androidTestCompile 'com.google.truth:truth:0.30'
androidTestCompile 'com.github.ignaciotcrespo:frutilla:0.7.1'
androidTestCompile 'org.mockito:mockito-core:2.2.9'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestCompile 'com.squareup.okhttp3:okhttp-testing-support:3.4.1'

Starting all my tests, or simply one of them such as:

@Test
public void test_Parse_JSONRepo_ParsesRepoDTO() throws IOException {
    ObjectMapper loJSONMapper = new ObjectMapper();
    String lsRepoData = mLocalifyClient.localify().loadRawFile(R.raw.repo_octocat);

    DTORepo loRepoDTO = loJSONMapper.readValue(lsRepoData, DTORepo.class);

    assertThat(loRepoDTO).isNotNull();
    assertThat(loRepoDTO.name).isEqualTo("git-consortium");
}

I get the following message in Android Studio:

Started running tests
Test running failed: Instrumentation run failed due to 'java.lang.AbstractMethodError'
Empty test suite.

Solution

  • The test suite output is always very laconic. In such cases it is always better to check what "Android Monitor" logcaat output is.

    And the answer is there:

    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:29)
        at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
        at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:168)
        at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:162)
        at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
        at org.mockito.Mockito.mock(Mockito.java:1632)
        at org.mockito.Mockito.mock(Mockito.java:1545)
        at fr.guddy.androidstarter.tests.mock.MockModuleRest.<init>(MockModuleRest.java:24)
        at fr.guddy.androidstarter.tests.mock.MockApplication.buildComponent(MockApplication.java:41)
        at fr.guddy.androidstarter.ApplicationAndroidStarter.onCreate(ApplicationAndroidStarter.java:70)
        at fr.guddy.androidstarter.tests.mock.MockApplication.onCreate(MockApplication.java:31)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
        at android.support.test.runner.MonitoringInstrumentation.callApplicationOnCreate(MonitoringInstrumentation.java:323)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5403)
        at android.app.ActivityThread.-wrap2(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    

    This is a known bug with Mockito version higher than 2.0.17-beta not cooperating with dexmaker-mockito. More about it here.

    The solution is just to use different version of Mockito:

    androidTestCompile 'org.mockito:mockito-core:2.0.17-beta'