Tôi đang cố chạy thử nghiệm đơn vị bằng cách sử dụng Robolectric; chúng chạy tốt trong Android Studio, nhưng các thử nghiệm tương tự không thành công khi chạy trong dòng lệnh - đó là một vấn đề lớn, tôi cần để có thể chạy chúng từ nền tảng tích hợp liên tục của tôi, không chỉ từ một IDE.Kiểm tra Robolectric chạy trong Android Studio nhưng không phải trên dòng lệnh
Tôi nghi ngờ rằng tôi thiếu một số đối số dòng lệnh (nói, một classpath hoặc một cái gì đó tương tự) hoặc gọi nhiệm vụ sai - nếu không thử nghiệm sẽ không chạy ở tất cả từ Android Studio. Một số chi tiết liên quan; kiểm tra như sau:
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "app/src/main/AndroidManifest.xml", resourceDir = "res", emulateSdk = 19)
public class SplashActivityTest {
@Test
public void testActivity() {
SplashActivity splashActivity = new SplashActivity();
String appName = splashActivity.getString(R.string.app_name); // HERE, line 20
assertEquals(appName, "App");
}
}
Như đã đề cập ở trên, nó chạy tốt trong Android Studio (bằng cách kích chuột phải vào file test và chọn Run 'SplashActivityTest'
) nhưng khi chạy nó từ dòng lệnh nó không thành công trong dòng được đánh dấu bằng HERE
, với stack trace sau:
android.content.res.Resources$NotFoundException: unknown resource 2131492893
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:309)
at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:69)
at android.content.res.AssetManager.getResourceText(AssetManager.java)
at android.content.res.Resources.getText(Resources.java:240)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:361)
at android.content.res.Resources.getText(Resources.java)
at android.content.res.Resources.getString(Resources.java:330)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:39)
at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:69)
at android.content.Context.getString(Context.java)
at path.to.myApp.activities.SplashActivityTest.testActivity(SplashActivityTest.java:20)
// ... and so on ...
tôi đang sử dụng này để chạy từ dòng lệnh (chú ý rằng ở đây và trong Android Studio tôi đang sử dụng wrapper Gradle):
project-root$ ./gradlew test --continue
Ngoài ra: Tôi đang sử dụng Android Studio 1.1.0
, Gradle phiên bản là 2.3
, phiên bản Robolectric là 3.0-SNAPSHOT
và phiên bản plugin Gradle Robolectric là 1.0.1
Oscar, bạn có thể chạy nó với tùy chọn '--debug'. Tôi hy vọng rằng bạn sẽ thấy thông báo về sự cố để tìm tệp kê khai và sử dụng tệp mặc định –
@EugenMartynov Bạn đang đi đúng hướng, tôi nhận được thông báo này trên bảng điều khiển: 'CẢNH BÁO: Không tìm thấy tệp kê khai nào tại ./app/src/ tệp chính/AndroidManifest.xml. Chỉ rơi vào tài nguyên hệ điều hành Android.' bạn có thể xây dựng? –