андроид.содержание.res.Resources$NotFoundException в Robolectric 2.4
у меня проблемы с загрузкой ресурсов при запуске модульных тестов из командной строки. Он отлично работает в IntelliJ.
Я использую:
- com.андроид.инструменты.сборка: gradle: 1.1.3
- org.robolectric: robolectric-gradle-плагин: 1.0.1
- org.robolectric:robolectric:2.4
у меня есть следующая структура проекта (Multi-module):
+---module1
| | build.gradle
| ---src
| +---main
| | | AndroidManifest.xml
| | |
| | +---res
| | | ---values
| | | strings.xml
| ---test
| ---java
| ---example
| | FooTest.java
+---module2
etc
мой тест (упрощенный) выглядит так:
@Config(emulateSdk = 18, reportSdk = 18, manifest = "./src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class FooTest {
@Test
public void test() {
String result = Robolectric.application.getString(R.string.error_message);
assertThat(result, notNullValue());
}
}
I получить этот stacktrace:
android.content.res.Resources$NotFoundException: unknown resource 2131361826
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:311)
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:235)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:363)
at android.content.res.Resources.getText(Resources.java)
at android.content.res.Resources.getString(Resources.java:325)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:41)
at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:96)
at android.content.Context.getString(Context.java)
Примечание: я довольно новичок в Gradle, поэтому вполне вероятно, что где-то есть неправильная конфигурация. Я предположил, что, следуя соглашению о структуре проекта, мне не нужно указывать, где найти ресурсы. Я попытался указать их, но безуспешно:
android {
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
}
1 ответов
во время расследования мы нашли причину проблемы. Если вы используете android gradle plugin v1.1.x
тогда вам не нужно в общем robolectric gradle plugin
.
будьте осторожны, что неправильная версия robolectric gradle plugin
нарушит ваши тесты.