2014-10-10 18 views
6

Ho appena impostato il test Robolectric tramite questo setup e mi viene visualizzato un errore durante il test della mia app.Robolectric InflateException quando si utilizza il layout personalizzato della barra delle azioni

Ho ristretto il problema fino al ProgressSpinner che è nella mia dogana ActionBar layout. Quando disattivo l'ActionBar personalizzato, il test funziona correttamente. Sto usando la normale barra delle azioni, non ActionBarSherlock.

Esiste una soluzione alternativa?

codice di prova

@RunWith(RobolectricTestRunner.class) 
public class MainActivityTest { 

MainActivity activity; 

@Before 
public void setup() 
{ 
    this.activity = Robolectric.buildActivity(MainActivity.class).create().get(); 
} 

@Test 
public void shouldHaveHappySmiles() throws Exception 
{ 
    String hello = this.activity.getString(R.string.app_name); 
    assertThat(hello, equalTo("LFDate")); 
} 

}

mancata Trace

android.view.InflateException: XML file C:\Users\Deric\Documents\GitHub\lfdate\android\res\layout\actionbar.xml line #-1 (sorry, not yet implemented): Error inflating class android.widget.ProgressBar 
    at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
    at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.java:38) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
    at com.android.internal.app.ActionBarImpl.setCustomView(ActionBarImpl.java:312) 
    at android.support.v7.app.ActionBarImplICS.setCustomView(ActionBarImplICS.java:93) 
    at android.support.v7.app.ActionBarImplJB.setCustomView(ActionBarImplJB.java:20) 
    at com.walintukai.lfdate.MainActivity.onCreate(MainActivity.java:216) 
    at android.app.Activity.performCreate(Activity.java:5133) 
    at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) 
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:113) 
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:265) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:110) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:120) 
    at com.walintukai.lfdate.MainActivityTest.setup(MainActivityTest.java:20) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:250) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.java:594) 
    at android.view.LayoutInflater.createView(LayoutInflater.java) 
    at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.java:38) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_onCreateView(LayoutInflater.java:669) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.java:694) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java) 
    at android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.java:397) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java) 
    at com.android.internal.app.ActionBarImpl.$$robo$$ActionBarImpl_060b_setCustomView(ActionBarImpl.java:312) 
    at com.android.internal.app.ActionBarImpl.setCustomView(ActionBarImpl.java) 
    at android.support.v7.app.ActionBarImplICS.$$robo$$ActionBarImplICS_1498_setCustomView(ActionBarImplICS.java:93) 
    at android.support.v7.app.ActionBarImplICS.setCustomView(ActionBarImplICS.java) 
    at android.support.v7.app.ActionBarImplJB.setCustomView(ActionBarImplJB.java:20) 
    at com.walintukai.lfdate.MainActivity.onCreate(MainActivity.java:216) 
    at android.app.Activity.$$robo$$Activity_c57b_performCreate(Activity.java:5133) 
    at android.app.Activity.performCreate(Activity.java) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) 
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:113) 
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:265) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:110) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:120) 
    at com.walintukai.lfdate.MainActivityTest.setup(MainActivityTest.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    ... 21 more 
Caused by: java.lang.NullPointerException 
    at org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.java:165) 
    at org.robolectric.shadows.ShadowResources.access$000(ShadowResources.java:55) 
    at org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.java:494) 
    at android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java) 
    at android.content.Context.obtainStyledAttributes(Context.java:416) 
    at android.view.View.__constructor__(View.java:3317) 
    at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) 
    at org.robolectric.shadows.ShadowView.__constructor__(ShadowView.java:63) 
    at android.view.View.<init>(View.java:3315) 
    at android.widget.ProgressBar.<init>(ProgressBar.java:253) 
    at android.widget.ProgressBar.<init>(ProgressBar.java:246) 
    at android.widget.ProgressBar.<init>(ProgressBar.java:242) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
    at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.java:38) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
    at com.android.internal.app.ActionBarImpl.setCustomView(ActionBarImpl.java:312) 
    at android.support.v7.app.ActionBarImplICS.setCustomView(ActionBarImplICS.java:93) 
    at android.support.v7.app.ActionBarImplJB.setCustomView(ActionBarImplJB.java:20) 
    at com.walintukai.lfdate.MainActivity.onCreate(MainActivity.java:216) 
    at android.app.Activity.performCreate(Activity.java:5133) 
    at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) 
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:113) 
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:265) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:110) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:120) 
    at com.walintukai.lfdate.MainActivityTest.setup(MainActivityTest.java:20) 
    ... 21 more 
+0

Inserisci un build.gradle. Quale versione di robolectric? –

risposta

1

Creare o aggiungere un file project.properties alla directory app (non prova directory se ci sono diversi moduli)

Aggiungere queste due righe al file appena creato

android.library.reference.1=../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3 
android.library.reference.2=../../build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3 

percorsi devono indicare i file manifesto di questi riferimenti