2015-06-18 10 views
5

Abrufen einer ResourceNotFoundException bei Verwendung einer Bibliothek mit Robolectic 3.0-rc3. Die Ressource wird in build.gradle mit compile "net.danlew: android.joda: 2.8.0" deklariert. Insbesondere ist dies der Android-Port von Joda-Time.Bibliotheksressourcen mit Robolectric 3 - JodaTime

android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f0501da 
at org.robolectric.shadows.ShadowResources.checkResName(ShadowResources.java:343) 
at org.robolectric.shadows.ShadowResources.getResName(ShadowResources.java:333) 
at org.robolectric.shadows.ShadowResources.openRawResource(ShadowResources.java:382) 
at android.content.res.Resources.openRawResource(Resources.java) 
at net.danlew.android.joda.ResourceZoneInfoProvider.openResource(ResourceZoneInfoProvider.java:120) 
at net.danlew.android.joda.ResourceZoneInfoProvider.<init>(ResourceZoneInfoProvider.java:39) 

Anwendungsklasse:

@Override 
public void onCreate() { 
    super.onCreate();  
    JodaTime.init(this); 
} 

Meine Testklasse:

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, 
    sdk = 21) 
public class MyTest { 

@Before 
public void setup() { 

} 

@Test 
public void myTest() { 
//Test my stuff 
} 

}

+0

Ich habe das gleiche Problem, aber Tests sind vorbei, wird der Fehler gerade angemeldet richtig? – Maximosaic

+0

Nein, Test fehlgeschlagen mit der runtimeException bei JodaTime.init (this); Linie. – Patrick

+0

Sorry dann. Ich benutze "net.danlew: android.joda: 2.7.2", aber ich merkte, dass ich dieses 'init' nicht mache. Aber ich habe gerade 'JodaTimeAndroid.init (activity)' ausprobiert und es funktionierte in meinem Test, vielleicht gibt es einen Unterschied zwischen 'JodaTimeAndroid' und' JodaTime'. Hoffe, das kann dir helfen, viel Glück! – Maximosaic

Antwort

0

Sie müssen die Bibliothek in Ihren Tests initialisieren, mit der Robolectric Laufzeitumgebung. Fügen Sie das also zu Ihren setup() Methoden hinzu.

JodaTimeAndroid.init(RuntimeEnvironment.application); 

Also Ihr Test wie folgt aussehen würde:

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21) 
public class MyApplicationTest { 

    @Before 
    public void setup() { 
     JodaTimeAndroid.init(RuntimeEnvironment.application); 
    } 

    @Test 
    public void myTest() { 
     //Test my stuff 
     DateTime aDateTime = new DateTime(); 
     DateTime bDateTime = new DateTime(aDateTime); 
     assertEquals(aDateTime, bDateTime); 
    } 
} 
+0

Haben Sie das genau, aber immer noch das gleiche Problem mit dem Öffnen von Ressourcen. – StuStirling

+0

Wenn Sie nur einen Test durchführen, statt der gesamten Suite, passiert das immer noch? Ich habe ein Problem vorher gesehen, wo aufgrund eines vorherigen Tests, der ausgeführt wurde und dies nicht richtig gemacht hat, andere Tests später abgebrochen werden –