android - View ClassCastException during Fragment injection -


given i'm using androidannotations this:

@efragment(r.layout.fragment_music_home2) public class musichomefragment extends appsbasedhomefragment {     @viewbyid     protected extrecyclerview pager; } 

then generated code musichomefragment_ looks @ 1 point:

    pager = ((extrecyclerview) hasviews.findviewbyid(com.company.r.id.pager)); 

which results in stack trace below:

java.lang.classcastexception: com.company.view.extrecyclerview_ cannot cast com.company.view.extrecyclerview     @ com.company.music.musichomefragment_.onviewchanged(musichomefragment_.java:97)     @ org.androidannotations.api.view.onviewchangednotifier.notifyviewchanged(onviewchangednotifier.java:41)     @ com.company.music.musichomefragment_.onviewcreated(musichomefragment_.java:85)     @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:973)     @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1138)     @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1120)     @ android.support.v4.app.fragmentmanagerimpl.dispatchactivitycreated(fragmentmanager.java:1929)     @ android.support.v4.app.fragmentactivity.onstart(fragmentactivity.java:547)     @ com.company.utils.baseactivity.onstart(baseactivity.java:104)     @ android.app.instrumentation.callactivityonstart(instrumentation.java:1171)     @ android.app.activity.performstart(activity.java:5253)     @ org.robolectric.util.reflectionhelpers$3.run(reflectionhelpers.java:162)     @ org.robolectric.util.reflectionhelpers.traverseclasshierarchy(reflectionhelpers.java:305)     @ org.robolectric.util.reflectionhelpers.callinstancemethod(reflectionhelpers.java:156)     @ org.robolectric.util.componentcontroller$1.run(componentcontroller.java:72)     @ org.robolectric.shadows.shadowlooper.runpaused(shadowlooper.java:304)     @ org.robolectric.shadows.coreshadowsadapter$2.runpaused(coreshadowsadapter.java:45)     @ org.robolectric.util.componentcontroller.invokewhilepaused(componentcontroller.java:69)     @ org.robolectric.util.activitycontroller.start(activitycontroller.java:143)     @ org.robolectric.util.activitycontroller.setup(activitycontroller.java:210)     @ org.robolectric.robolectric.setupactivity(robolectric.java:46)     @ com.company.music.musichomefragmenttest.showemptypagewhennocontentsareavailable(musichomefragmenttest.java:65)     @ org.junit.runners.model.frameworkmethod$1.runreflectivecall(frameworkmethod.java:50)     @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:12)     @ org.junit.runners.model.frameworkmethod.invokeexplosively(frameworkmethod.java:47)     @ org.junit.internal.runners.statements.invokemethod.evaluate(invokemethod.java:17)     @ org.powermock.modules.junit4.rule.powermockstatement$1.run(powermockrule.java:52)     @ org.powermock.reflect.internal.whiteboximpl.performmethodinvocation(whiteboximpl.java:1873)     @ org.powermock.reflect.internal.whiteboximpl.doinvokemethod(whiteboximpl.java:773)     @ org.powermock.reflect.internal.whiteboximpl.invokemethod(whiteboximpl.java:638)     @ org.powermock.reflect.whitebox.invokemethod(whitebox.java:401)     @ org.powermock.classloading.classloaderexecutor.execute(classloaderexecutor.java:98)     @ org.powermock.classloading.classloaderexecutor.execute(classloaderexecutor.java:78)     @ org.powermock.modules.junit4.rule.powermockstatement.evaluate(powermockrule.java:49)     @ org.robolectric.robolectrictestrunner$2.evaluate(robolectrictestrunner.java:251)     @ org.robolectric.robolectrictestrunner.runchild(robolectrictestrunner.java:188)     @ org.robolectric.robolectrictestrunner.runchild(robolectrictestrunner.java:54)     @ org.junit.runners.parentrunner$3.run(parentrunner.java:290)     @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:71)     @ org.junit.runners.parentrunner.runchildren(parentrunner.java:288)     @ org.junit.runners.parentrunner.access$000(parentrunner.java:58)     @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:268)     @ org.robolectric.robolectrictestrunner$1.evaluate(robolectrictestrunner.java:152)     @ org.junit.runners.parentrunner.run(parentrunner.java:363)     @ org.gradle.api.internal.tasks.testing.junit.junittestclassexecuter.runtestclass(junittestclassexecuter.java:86)     @ org.gradle.api.internal.tasks.testing.junit.junittestclassexecuter.execute(junittestclassexecuter.java:49)     @ org.gradle.api.internal.tasks.testing.junit.junittestclassprocessor.processtestclass(junittestclassprocessor.java:64)     @ org.gradle.api.internal.tasks.testing.suitetestclassprocessor.processtestclass(suitetestclassprocessor.java:50)     @ org.gradle.messaging.dispatch.reflectiondispatch.dispatch(reflectiondispatch.java:35)     @ org.gradle.messaging.dispatch.reflectiondispatch.dispatch(reflectiondispatch.java:24)     @ org.gradle.messaging.dispatch.contextclassloaderdispatch.dispatch(contextclassloaderdispatch.java:32)     @ org.gradle.messaging.dispatch.proxydispatchadapter$dispatchinginvocationhandler.invoke(proxydispatchadapter.java:93)     @ com.sun.proxy.$proxy2.processtestclass(unknown source)     @ org.gradle.api.internal.tasks.testing.worker.testworker.processtestclass(testworker.java:106)     @ org.gradle.messaging.dispatch.reflectiondispatch.dispatch(reflectiondispatch.java:35)     @ org.gradle.messaging.dispatch.reflectiondispatch.dispatch(reflectiondispatch.java:24)     @ org.gradle.messaging.remote.internal.hub.messagehub$handler.run(messagehub.java:360)     @ org.gradle.internal.concurrent.executorpolicy$catchandrecordfailures.onexecute(executorpolicy.java:54)     @ org.gradle.internal.concurrent.stoppableexecutorimpl$1.run(stoppableexecutorimpl.java:40)     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145)     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615)     @ java.lang.thread.run(thread.java:744) 

heres test looks like:

@runwith(robolectricgradletestrunner.class) @config(constants = buildconfig.class, sdk = 19) @powermockignore({"org.mockito.*", "org.robolectric.*", "android.*"}) @preparefortest(mythememanager_.class) public class musichomefragmenttest {      @rule     public powermockrule rule = new powermockrule();      @test     public void showemptypagewhennocontentsareavailable() {          mockstatic(mythememanager_.class);          final mythememanager_ thememanager = mock(mythememanager_.class);          when(mythememanager_.getinstance_(mockito.<context>anyobject())).thenreturn(thememanager);          musichomeactivity_ controller = robolectric.setupactivity(musichomeactivity_.class);          // todo: start test.          powermockito.verifystatic();     } } 

build.gradle:

testcompile "junit:junit:${junit_version}" testcompile "org.mockito:mockito-core:${mockito_version}" testcompile "org.powermock:powermock-module-junit4:${powermock_version}" testcompile "org.powermock:powermock-module-junit4-rule:${powermock_version}" testcompile "org.powermock:powermock-api-mockito:${powermock_version}" testcompile "org.powermock:powermock-classloading-xstream:${powermock_version}"  testcompile "com.jakewharton:disklrucache:${disklrucache_version}" testcompile "org.robolectric:robolectric:${robolectric_version}" testcompile "org.robolectric:shadows-core:${robolectric_version}" testcompile "org.robolectric:shadows-support-v4:${robolectric_version}"  android_test_version = 0.3 dexmaker_version = 1.4-snapshot espresso_version = 2.2 junit_version = 4.12 mockito_version = 1.10.19 powermock_version = 1.6.2 robolectric_version = 3.0 uiautomator_version = 2.1.1 

how can resolved test can execute flawlessly?

the test needs enhanced @powermockignore rule wrongly casted class. seem have been overridden combination of mocking frameworks.

@runwith(robolectricgradletestrunner.class) @config(constants = buildconfig.class, sdk = 19) // ** change below ** @powermockignore({"org.mockito.*", "org.robolectric.*", "android.*", "com.company.view.extrecyclerview_"}) @preparefortest(mythememanager_.class) public class musichomefragmenttest {      @rule     public powermockrule rule = new powermockrule();      @test     public void showemptypagewhennocontentsareavailable() {          mockstatic(mythememanager_.class);          final mythememanager_ thememanager = mock(mythememanager_.class);          when(mythememanager_.getinstance_(mockito.<context>anyobject())).thenreturn(thememanager);          musichomeactivity_ controller = robolectric.setupactivity(musichomeactivity_.class);          // todo: start test.          powermockito.verifystatic();     } } 

Comments