2015-06-04 12 views
8

Ich verwende Robolectric 3.0 RC3 für Komponententests in Android Studio. Und ich bekomme jedes Mal eine ResourceNotFoundException, wenn ich den Test durchführe. Bitte helfen Sie mir, das Problem zu lösen.

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' 
} 

Testklasse

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

Also, wenn Robolectric.buildActivity() erhalte ich die Resources$NotFoundException. Ressource #0x7f040016 zeigt auf (Xml). id Nach dem Stapel TRACE-

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 ist setContentView(R.layout.activity_main);

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

+0

Was ist Arbeitsverzeichnis in Ihrer Testlaufkonfiguration? –

+0

@EugenMartynov $ MODULE_DIR $ –

+0

Haben Sie einige benutzerdefinierte Ansichten in Aktivität? –

Antwort

3

Ist Ihre Testklasse korrekt kommentiert? Und verwendet es den richtigen Pfad zu einer Manifestdatei? Die folgenden Werke für mich:

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

die Config Anmerkung Entfernen bewirkt, dass die ResourcesNotFound Ausnahme, die Sie erwähnt.

+3

Der Teil 'manifest =" src/main/AndroidManifest.xml "kann helfen, dieses Problem zu lösen, aber es wird Ihnen später immer mehr Probleme geben. Verwenden Sie anstelle von 'RobolectricTestRunner' den' RobolectricGradleTestRunner' – nenick

+0

Lesen Sie auch 'Hinweis für Mac-Benutzer' unter http://robolectric.org/getting-started/ – nenick

+0

'emulateSdk' ist veraltet und wurde von Robolectric 3.0 entfernt, verwenden Sie' sdk'. –

0

Das ist wirklich eine Hilfe für mich mit Robolectric! Öffnen Sie Gradle, doppelklicken Sie auf ProjectName>: app> Tasks> verification> testDebugUnitTest. Like in picture Weitere Details here

Verwandte Themen