6

コマンド ラインから単体テストを実行するときに、リソースの読み込みに問題があります。IntelliJ で問題なく動作します。

私は使用しています:

  • com.android.tools.build:gradle:1.1.3
  • org.robolectric:robolectric-gradle-plugin:1.0.1
  • org.robolectric:robolectric:2.4

私は次のプロジェクト構造(マルチモジュール)を持っています:

+---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());
    }
 }

私はこのスタックトレースを取得します:

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']
        }
    }
}
4

1 に答える 1

1

調査の結果、問題の原因が判明しました。使用する場合android gradle plugin v1.1.xは、共通する必要はありませんrobolectric gradle plugin

robolectric gradle pluginのバージョンが正しくないと、テストが中断されることに注意してください。

于 2015-04-11T18:49:59.333 に答える