2015-04-09 14 views
6

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'] 
     } 
    } 
} 
+0

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. –

+0

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

+0

Niewłaściwe przypuszczenie. Czy potrafisz w ogóle usunąć wzmiankę o pliku manifestu w konfiguracji? –

Odpowiedz

1

Podczas dochodzenia znaleźliśmy przyczynę problemu. Jeśli używasz android gradle plugin v1.1.x, to nie potrzebujesz wspólnej robolectric gradle plugin.

Należy uważać, aby niepoprawna wersja testu robolectric gradle plugin przerwała testy.

Powiązane problemy