2015-06-18 12 views
5

Wykrywanie wyjątku ResourceNotFoundException przy użyciu biblioteki z Robolectic 3.0-rc3. Zasób jest zadeklarowany w build.gradle przy kompilacji "net.danlew: android.joda: 2.8.0". W szczególności jest to port na Androida Joda-Time.Zasoby biblioteczne z 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) 

klasa Zastosowanie:

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

Moja klasa Test:

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

@Before 
public void setup() { 

} 

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

}

+0

Mam ten sam problem, ale testy przechodzą, błąd zostanie tylko rejestrowane w porządku? – Maximosaic

+0

Nie, test kończy się niepowodzeniem z wyjątkiem runtimeException na stronie JodaTime.init (this); linia. – Patrick

+0

Przepraszam. Używam "net.danlew: android.joda: 2.7.2" jednak zdałem sobie sprawę, że nie robię tego 'init'. Ale po prostu próbowałem 'JodaTimeAndroid.init (activity)' i działało to w moim teście, może jest różnica między 'JodaTimeAndroid' i' JodaTime'. Mam nadzieję, że to ci pomoże, powodzenia! – Maximosaic

Odpowiedz

0

Trzeba zainicjować bibliotekę w badaniach, ze środowiskiem uruchomieniowym Robolectric. Dodaj to do swoich metod setup().

JodaTimeAndroid.init(RuntimeEnvironment.application); 

Więc próba będzie wyglądać mniej więcej tak:

@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

Czy to dokładnie, ale nadal masz ten sam problem z otwieraniem zasobów. – StuStirling

+0

Jeśli przeprowadzasz tylko jeden test, zamiast całego pakietu, to nadal się dzieje? Widziałem problem, zanim ze względu na poprzedni test, który został uruchomiony i nie zrobił tego poprawnie, później łamie inne testy –

Powiązane problemy