2015-06-04 7 views
8

Sto utilizzando Robolectric 3.0 RC3 per i test delle unità in Android Studio. E ricevo un ResourceNotFoundException ogni volta che eseguo il test. Per favore aiutami a risolvere il problema.

build.gradle

dependencies { 
    testCompile 'junit:junit:4.12' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.0.0' 
    testCompile 'org.mockito:mockito-core:1.9.5' 
    testCompile 'org.robolectric:robolectric:3.0-rc3' 
    compile 'com.ibm.icu:icu4j:53.1' 
} 

Classe test

@Before 
public void setUp() throws Exception { 
    activity = Robolectric.buildActivity(MainActivity.class).create().get(); 
} 
@Test 
public void pressingTheButtonShouldStartTheListActivity() throws Exception { 
    //Something to test 
} 

Così, ogni volta Robolectric.buildActivity() ho la Resources$NotFoundException. Risorsa #0x7f040016 punti a R.layout.activity_main (xml). Dopo id lo stack tracciabilità

android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f040016 
at org.robolectric.shadows.ShadowResources.checkResName(ShadowResources.java:343) 
at org.robolectric.shadows.ShadowResources.resolveResName(ShadowResources.java:338) 
at org.robolectric.shadows.ShadowResources.loadXmlResourceParser(ShadowResources.java:429) 
at android.content.res.Resources.loadXmlResourceParser(Resources.java) 
at android.content.res.Resources.getLayout(Resources.java:852) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:394) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256) 
at android.app.Activity.setContentView(Activity.java:1867) 
at com.aricent.anas.unittesting2.MainActivity.onCreate(MainActivity.java:15) //****HERE**** 
at android.app.Activity.performCreate(Activity.java:5008) 
at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195) 
at org.robolectric.util.ActivityController$1.run(ActivityController.java:122) 
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:305) 
at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:45) 
at org.robolectric.util.ActivityController.create(ActivityController.java:118) 
at org.robolectric.util.ActivityController.create(ActivityController.java:129) 
at com.aricent.anas.unittesting2.MainActivityTest.setUp(MainActivityTest.java:32) //****HERE**** 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:245) 
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:185) 
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:149) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 


Process finished with exit code -1 

MainActivity.java:15 è setContentView(R.layout.activity_main);

MainActivityTest.java:32 è activity = Robolectric.buildActivity(MainActivity.class).create().get();

+0

Che cos'è la directory di lavoro nella configurazione di esecuzione del test? –

+0

@EugenMartynov $ MODULE_DIR $ –

+0

Hai alcune visualizzazioni personalizzate in Attività? –

risposta

3

È il vostro classe di test annotati correttamente? E sta usando il percorso corretto per un file manifest? le seguenti opere per me:

@RunWith(RobolectricTestRunner.class) 
@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = Build.VERSION_CODES.LOLLIPOP) 
public class MyActivityTest { .... } 

Rimozione l'annotazione Config causa l'eccezione ResourcesNotFound lei ha citato.

+3

La parte 'manifest =" src/main/AndroidManifest.xml "' può aiutare a risolvere questo problema, ma ti darà più e più problemi in seguito. Invece di 'RobolectricTestRunner' usa il' RobolectricGradleTestRunner' – nenick

+0

Leggi anche 'Nota per utenti Mac' su http://robolectric.org/getting-started/ – nenick

+0

' emulateSdk' è deprecato e rimosso da Robolectric 3.0, usa 'sdk'. –

0

Questo è davvero d'aiuto per me con Robolectric! Apri Grado, fai doppio clic su ProjectName>: app> Attività> verifica> testDebugUnitTest. Like in picture Maggiori dettagli here