Gradle Robolectric Resources NotFoundException в тестировании

Я уже знал, что эта проблема уже задавалась раньше, но я не могу решить эту проблему. Я могу скомпилировать и применить тест с помощью jUnit, Robolectric и Gradle. Проблема или ошибка возникает, когда я пытаюсь протестировать действие или получить ресурс. Каждый раз у меня одна и та же проблема:

android.content.res.Resources$NotFoundException: неизвестный ресурс

Resources$NotFoundException: такой темы нет

 PageActivity startPageActivity   =   Robolectric.buildActivity(PageActivity.class).create().get();

 Context context =  Robolectric.getShadowApplication().getApplicationContext();
 ShadowContext shadowContext = shadowOf(context);
 assertNotNull( " No App name String " ,shadowContext.getString(R.string.app_name) );

А это структура проекта:

.
├── build.gradle
├── settings.gradle
└── mainproject
    ├── build
    │   ├── classes
    │   │   └── debug
    ├── build.gradle
    └── src
       └── main
       │    ├── AndroidManifest.xml
       │    └── java
       │         └── com...
       │    └── resources
       └── envDev
       │    └── java
       │         └── com...
       │    └── resources
       └── envQa
       │    └── java
       │          └── com...
       │    └── resources
       └── envLive
       │    └── java
       │         └── com...
       │    └── resources
       └── test
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvDev
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvQa
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvLive
            └── src
                 └── java
                       └── com...
                 └── rescources

Это исходный набор, определенный в gradle:

sourceSets {  
        main {
            java.srcDir  file('src/main/java')
            manifest.srcFile file('src/main/AndroidManifest.xml')
            res.srcDir file('src/main/resources')
        }
        envDev {
            java.srcDir file('src/envDev/java')
            manifest.srcFile 'src/envDev/AndroidManifest.xml'
            res.srcDir file('src/envDev/resources')
        }

        envQa {
            java.srcDir file('src/envQa/java')
            manifest.srcFile 'src/envQa/AndroidManifest.xml'
            res.srcDir file('src/envQa/resources')
        }

        envLive {
            java.srcDir file('src/envLive/java')
            manifest.srcFile 'src/envLive/AndroidManifest.xml'
            res.srcDir file('src/envLive/resources')
        }

        instrumentTest {
            java.srcDir  file('src/test/java')
            res.srcDir  file('src/test/resources')
        }
        instrumentTestEnvDev {
            java.srcDir file('src/testEnvDev/java')
            res.srcDir file('src/testEnvDev/resources')
        }
        instrumentTestEnvQa {
            java.srcDir file('src/testEnvQa/java')
            res.srcDir file('src/testEnvQa/resources')
        }
        instrumentTestEnvLive {
            java.srcDir file('src/testEnvLive/java')
            res.srcDir file('src/testEnvLive/resources')
        }

    }

Может ли кто-нибудь помочь справиться с этой проблемой?

Спасибо


person Jose M Lechon    schedule 17.01.2014    source источник
comment
Используете ли вы какой-нибудь плагин Gradle для запуска робоэлектрических тестов? Какую версию robolectric вы используете? Нет необходимости указывать все исходные наборы — переименуйте папки ресурсов в res и просто используйте вкусы продукта.   -  person Eugen Martynov    schedule 18.01.2014
comment
Да, я использую Gradle Android Test Plugin 0.9.1 и Robolectric 2.1. Я собираюсь снова применить res как имя ресурса. Я уже делал это раньше, но это не сработало. Спасибо.   -  person Jose M Lechon    schedule 20.01.2014
comment
Вы используете плагин Android Gradle?   -  person Eugen Martynov    schedule 20.01.2014
comment
Да, я использую Jake Wharton: ссылка @EugenMrtynov   -  person Jose M Lechon    schedule 20.01.2014


Ответы (2)


У меня была такая же проблема даже с Robolectric v2.3-SNAPSHOT. Решил это, явно установив манифест в тестовом файле с помощью аннотации Config, например

@Config(manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest extends AndroidTestCase {
...
}
person Nora Mullaney    schedule 27.03.2014

В конце концов мне удалось решить эту проблему, перейдя на Robolectric v2.3-SNAPSHOT.

Вы можете найти этот SNAPSHOT здесь oss.sonatype.org/index.html #nexus-search;quick~org.robolectric

Тот же плагин Jake Wharton хорошо работает с этим Robolectric v2.3-SNAPSHOT.

Возможно, эта информация поможет кому-то еще.

person Jose M Lechon    schedule 20.01.2014
comment
как добавить версию моментального снимка в gradle.build? мой не может его найти - person noloman; 03.10.2014