2015-06-18 18 views
5

Nhận ResourceNotFoundException khi sử dụng thư viện với Robolectic 3.0-rc3. Tài nguyên được khai báo trong build.gradle với biên dịch 'net.danlew: android.joda: 2.8.0'. Cụ thể đây là cổng Android của Joda-Time.Tài nguyên thư viện với 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) 

Application lớp:

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

thử nghiệm của tôi lớp:

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

@Before 
public void setup() { 

} 

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

}

+0

Tôi có cùng một vấn đề, nhưng các xét nghiệm đang trôi qua, các lỗi được chỉ đăng nhập phải không? – Maximosaic

+0

Không, kiểm tra thất bại với runtimeException tại JodaTime.init (điều này); hàng. – Patrick

+0

Xin lỗi sau đó. Tôi sử dụng "net.danlew: android.joda: 2.7.2" tuy nhiên tôi nhận ra rằng tôi không làm điều này 'init'. Nhưng tôi đã thử 'JodaTimeAndroid.init (hoạt động)' và nó đã làm việc trong bài kiểm tra của tôi, có thể có sự khác biệt giữa 'JodaTimeAndroid' và' JodaTime'. Hy vọng điều này có thể giúp bạn, chúc may mắn! – Maximosaic

Trả lời

0

Bạn cần phải khởi tạo thư viện trong các thử nghiệm của bạn, với môi trường runtime Robolectric. Vì vậy, hãy thêm số này vào các phương thức setup() của bạn.

JodaTimeAndroid.init(RuntimeEnvironment.application); 

Vì vậy, kiểm tra của bạn sẽ trông như thế này:

@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

Có chính xác nhưng vẫn nhận được cùng một vấn đề với tài nguyên mở. – StuStirling

+0

Nếu bạn chỉ chạy một thử nghiệm, thay vì toàn bộ bộ, nó vẫn xảy ra? Tôi đã nhìn thấy một vấn đề trước khi ở đó vì một bài kiểm tra trước đó đã được chạy và đã không làm điều này đúng, nó sẽ phá vỡ các bài kiểm tra khác sau –

Các vấn đề liên quan