2015-06-04 10 views
8

Używam Robolectric 3.0 RC3 do testowania jednostkowego w Android Studio. I otrzymuję ResourceNotFoundException za każdym razem, gdy uruchomię test. Pomóż mi rozwiązać problem.

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

Klasa testu

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

Tak więc, gdy Robolectric.buildActivity() uzyskać Resources$NotFoundException. Zasób #0x7f040016 wskazuje na R.layout.activity_main (xml). Następujący identyfikator stos odtwarzania informacji

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

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

+0

Co to jest katalog roboczy w konfiguracji testowej? –

+0

@EugenMartynov $ MODULE_DIR $ –

+0

Czy masz jakieś niestandardowe widoki w działaniu? –

Odpowiedz

3

Czy Twoja klasa Test adnotacją prawidłowo? I czy używa poprawnej ścieżki do pliku manifestu? następujące prace dla mnie:

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

Usuwanie adnotacji Config powoduje wyjątek ResourcesNotFound wzmiance.

+3

Część "manifest =" src/main/AndroidManifest.xml "' może pomóc w rozwiązaniu tego problemu, ale spowoduje to pojawienie się kolejnych problemów. Zamiast 'RobolectricTestRunner' użyj' RobolectricGradleTestRunner' – nenick

+0

Przeczytaj także "Uwaga dla użytkowników komputerów Mac" pod adresem http://robolectric.org/getting-started/ – nenick

+0

'emulateSdk' jest przestarzałe i usunięte z Robolectric 3.0, użyj' sdk'. –

0

To jest naprawdę pomoc dla mnie z Robolectric! Otwórz Gradle, kliknij dwukrotnie ProjectName>: app> Tasks> verification> testDebugUnitTest. Like in picture Więcej szczegółów here

Powiązane problemy