6

Я пытаюсь запустить тесты с espresso 2.2.1 в Android Studio 1.5.1. Когда я запускаю LoginActivityTest, я получаю эту ошибку: «android.content.res.Resources $ NotFoundException», вызванный, когда LoginActivity вызывает MyService.java, а MyService нужны целые ресурсы (т. Е. Rinteger.number_of_days). Эти ресурсы определяются в файле R.integer.xml в модуле gradle (версия 1.5.0). Структура

проекта:

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

Мой тестовый класс:

@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()); 
} 
} 

ошибка 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' 

Как я могу исправить эту проблему?

+0

И он отлично работает, если вы выполняете одно и то же действие вручную (самостоятельно)? – Sufian

+0

Если я запускаю приложение (без теста), все работает нормально. Я не уверен, отвечу ли вы на ваш вопрос. – Insoft

+0

Я получаю такую ​​же ошибку после обновления до 'classpath 'com.android.tools.build: gradle: 2.0.0-beta3''. Кажется, Google только что выпустил его. вчера у меня не было этой проблемы :( – Hesam

ответ

1

Если вы используете JUnit4 в своем тесте и ActivityTestRule, тогда вам не нужно расширять ActivityInstrumentationTestCase2<LoginActivity> и не нужен конструктор. Исправьте код так, это будет выглядеть, как это и попробовать еще раз:

@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: см комментарий в коде

+1

Это не работает :(Я получаю ту же ошибку. – Insoft

+0

взгляните на мое обновление, вы не можете использовать идентификатор макета в 'onView()'. Кроме того, у него нет никаких действий, таких как щелчок или проверка. Удалите эту строку. – denys

+0

Хорошо, я удалил эту строку, и я получаю ту же ошибку. Я думаю, потому что ActivityTestRule инициализирует LoginActivity, который вызывает MySeri VCE. Таким образом, проблема перед запуском метода testConfigDialog. – Insoft

0

Я была такая же проблема, проблема заключается в build.gradle

I downgrade 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'