Mam problemy z ładowaniem zasobów podczas uruchamiania testów jednostkowych z wiersza poleceń. Działa dobrze w IntelliJ.
Używam:
- com.android.tools.build:gradle:1.1.3
- org.robolectric: robolectric-Gradle-plugin: 1.0.1
- org.robolectric : robolectric: 2,4
I ma następującą strukturę projektu (wielomodułowego)
+---module1
| | build.gradle
| \---src
| +---main
| | | AndroidManifest.xml
| | |
| | +---res
| | | \---values
| | | strings.xml
| \---test
| \---java
| \---example
| | FooTest.java
+---module2
etc
Mój testowy (uproszczone) wygląda następująco:
@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());
}
}
otrzymuję ten 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)
Uwaga: Jestem zupełnie nowy w Gradle więc jest prawdopodobne, że jest błąd w konfiguracji gdzieś. Przyjąłem, że stosując konwencję struktury projektu, nie muszę określać, gdzie znaleźć zasoby. Próbowałem je określić, ale bez powodzenia:
android {
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
}
Czy możesz spróbować zmienić manifest konfiguracyjny na 'module1/src/main/AndroidManifest.xml'. To nie jest poprawka dla twojego problemu (teraz prawdopodobnie będziesz mieć niepowodzenia testów w AS), ale tylko szybko sprawdź problem. –
Cześć, próbowałem i mam to: > Plik '/ opt/buildagent/work/22b7e45eb23ab445/module1/module1 /src/main/AndroidManifest.xml "określony dla manifestu właściwości" nie istnieje. – Alix
Niewłaściwe przypuszczenie. Czy potrafisz w ogóle usunąć wzmiankę o pliku manifestu w konfiguracji? –