2014-01-17 3 views
8

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

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

Ресурсы $ 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 

Это исходный набор de Ограбление в градиенте:

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') 
     } 

    } 

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

Благодаря

+0

Вы используете какой-то плагин с градиентом для выполнения robolectric тестов? Какую версию robolectric вы используете? Нет необходимости указывать все исходные наборы - переименовать папки ресурсов в res и просто использовать вкусы продукта –

+0

Да, я использую Gradle Android Test Plugin 0.9.1 и Robolectric 2.1. Я снова буду применять «res» в качестве имени ресурса. Я уже делал это раньше, но это не сработало. Благодарю. –

+0

Вы используете плагин android gradle? –

ответ

0

В конце мне удалось решить переход к Robolectric v2.3-SNAPSHOT.

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

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

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

+0

как вы добавляете версию моментального снимка в свой 'gradle.build' ? Мой не может найти его – noloman

13

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

@Config(manifest = "src/main/AndroidManifest.xml") 
@RunWith(RobolectricTestRunner.class) 
public class MainActivityTest extends AndroidTestCase { 
... 
} 
Смежные вопросы