6

Tôi cố gắng chạy thử nghiệm với espresso 2.2.1 trong Android Studio 1.5.1. Khi tôi chạy LoginActivityTest tôi nhận được lỗi này: "android.content.res.Resources $ NotFoundException" gây ra khi LoginActivity gọi MyService.java và MyService cần một tài nguyên số nguyên (tức là R.integer.number_of_days). Tài nguyên này được định nghĩa trong tệp R.integer.xml trong mô-đun gradle (phiên bản 1.5.0). cấu trúc

dự án:

RootFolder/ ├----projectA/ │ ├----build.gradle │ ├----settings.gradle │ └----src/androidTest/java/.../LoginActivityTest │ └----src/main/java/.../LoginActivity │ └----Module/ ├----krill/ │ └----build.gradle │ ├----settings.gradle │ └----src/main/ | └----java/service/MyService.java | └----res/value/integers.xml │ └----otherModule/ └----build.gradle

kiểm tra lớp của tôi:

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity >{ 

@Rule 
public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule(LoginActivity.class); 

public LoginActivityTest() { 
    super(LoginActivity.class); 
} 

@Test 
public void testConfigDialog() { 
    onView(withId(R.layout.login_custom_view)); 

    onView(withId(R.id.id_username)).perform(clearText()); 
    onView(withId(R.id.id_password)).perform(clearText()); 
} 
} 

lỗi stacktrace:

Running tests 
Test running started 
android.content.res.Resources$NotFoundException: Resource ID #0x7f090004 
at android.content.res.Resources.getValue(Resources.java:1233) 
at android.content.res.Resources.getInteger(Resources.java:989) 
at it.insoft.android.lib.auth.infrastructure.AuthenticatorPreferences.<init>(MyService.java:36) 
at it.insoft.android.lib.auth.infrastructure.AuthenticatorPreferences.getInstance(MyService.java:45) 
at it.insoft.android.lib.auth.application.BaseLoginActivity.onCreate(BaseLoginActivity.java:27) 
at it.insoft.android.novae.application.LoginActivity.onCreate(LoginActivity.java:57) 
at android.app.Activity.performCreate(Activity.java:5937) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:534) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 


java.lang.RuntimeException: Unable to start activity ComponentInfo{it.insoft.android.novae/it.insoft.android.appname.application.LoginActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f090004 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f090004 
at android.content.res.Resources.getValue(Resources.java:1233) 
at android.content.res.Resources.getInteger(Resources.java:989) 
at it.insoft.android.lib.auth.infrastructure.AuthenticatorPreferences.<init>(AuthenticatorPreferences.java:36) 
at it.insoft.android.lib.auth.infrastructure.AuthenticatorPreferences.getInstance(MyService.java:45) 
at it.insoft.android.lib.auth.application.BaseLoginActivity.onCreate(BaseLoginActivity.java:27) 
at it.insoft.android.novae.application.LoginActivity.onCreate(LoginActivity.java:57) 
at android.app.Activity.performCreate(Activity.java:5937) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:534) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
... 10 more 

Test running failed: Instrumentation run failed due to 'android.content.res.Resources$NotFoundException' 

Làm cách nào để khắc phục sự cố này?

+0

Và nó hoạt động tốt nếu bạn thực hiện cùng một hành động thủ công (một mình)? – Sufian

+0

Nếu tôi chạy ứng dụng (không kiểm tra), tất cả đều hoạt động tốt. Tôi không chắc chắn nếu tôi trả lời câu hỏi của bạn. – Insoft

+0

Tôi nhận được lỗi tương tự sau khi cập nhật lên 'classpath' com.android.tools.build: gradle: 2.0.0-beta3''. Dường như Google vừa phát hành nó. hôm qua tôi đã không có vấn đề này: ( – Hesam

Trả lời

1

Nếu bạn sử dụng JUnit4 trong thử nghiệm và ActivityTestRule thì bạn không cần phải mở rộng ActivityInstrumentationTestCase2<LoginActivity> và không cần hàm tạo. Fix mã của bạn vì vậy nó sẽ giống như thế này và thử lại:

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class LoginActivityTest { 

    @Rule 
    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule(LoginActivity.class); 

    @Test 
    public void testConfigDialog() { 
     onView(withId(R.layout.login_custom_view)); //you can't use layout id here there must be a view id 

     onView(withId(R.id.id_username)).perform(clearText()); 
     onView(withId(R.id.id_password)).perform(clearText()); 
    } 
} 

UPDATE: thấy bình trong mã

+1

Nó không hoạt động: (Tôi nhận được lỗi tương tự. – Insoft

+0

hãy xem bản cập nhật của tôi, bạn không thể sử dụng id bố cục trong 'onView()'. Hơn nữa, nó không có bất kỳ hành động nào giống như click hoặc check.Chọn dòng đó – denys

+0

Ok, tôi đã xóa dòng đó và tôi nhận được cùng một lỗi.Tôi nghĩ vì ActivityTestRule inizialize LoginActivity gọi MySeri vce. Vì vậy, vấn đề là trước khi chạy phương pháp testConfigDialog. – Insoft

0

tôi đã cùng một vấn đề, vấn đề là ở build.gradle

tôi hạ cấp espresso

androidTestCompile 'com.android.support.test:runner:0.4.1' 
androidTestCompile 'com.android.support.test:rules:0.4.1' 
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
Các vấn đề liên quan