web-dev-qa-db-ja.com

Robolectricは「AndroidManifest.xmlが見つかりません」と言います

Robolectric RC3をAndroid Studioで動作させようとすると、

Caused by: Java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project's AndroidManifest.xml
at org.robolectric.manifest.AndroidManifest.validate(AndroidManifest.Java:120)
at org.robolectric.manifest.AndroidManifest.getResourcePath(AndroidManifest.Java:469)
at org.robolectric.manifest.AndroidManifest.getIncludedResourcePaths(AndroidManifest.Java:475)
at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.Java:479)
at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.Java:471)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.Java:73)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.Java:421)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:234)

私は試した

@Config(manifest = "app/src/main/AndroidManifest.xml", constants = BuildConfig.class, sdk=21)

testRunnerでマニフェストの場所を設定しようとしましたが、何も機能しませんでした。ファイルシステムでは、マニフェストが

./app/build/intermediates/manifests/full/debug/AndroidManifest.xml

robolectricが探している場所ではありません。ある時点でマニフェストが無視された直後に、リソースで同様の問題が発生しました。アプリまたはRobolectricは、アプリが使用する未加工のリソースを見つけることができませんでした。これは私のビルドファイルにあります:

   sourceSets {
    main {
        Java.srcDirs = ['src/main/Java']
        resources.srcDirs = ['src/main/res']
    }
    test {
        Java.srcDirs = ['src/test/Java', 'src/main/Java']
        resources.srcDirs = ['src/test/res', 'src/main/res']
    }
}

Robolectricにマニフェストを探す場所、さらに重要なことにリソースを探す場所を伝えるにはどうすればよいですか?

編集:githubからRobolectricをチェックアウトし、ビルドし、ローカルの.m2リポジトリにインストールしました。gradleファイルはローカルのSNAPSHOTビルドを参照し、Gradleが新しいバージョンを取得しないようにしました。リモートリポジトリ。次に、RobolectricGradleTestRunnerをプロジェクトにコピーし、ファイルの場所が定義されている行を変更しました。モジュール名が含まれていませんでした。今では動作します。

41
Christine

JUnitでテストを実行しようとしていると仮定しています。次の2つのことを試すことができます。

  1. here のように、カスタムTestRunnerクラスを作成します。 CustomTestRunnerセクションを確認してください。ここでは、基本的に、使用する適切なマニフェストを実際に知っているTestRunnerを作成します。 @Configアノテーションを使用して、テストランナーで実行するテストを指定します。
  2. (私の好み)JUnit構成に移動し、実行>構成の編集を選択します。 「作業ディレクトリ」テキストボックスに注意してください。 /app(OSXおよびLinuxの場合)または\app(Windows)をテキストボックスに書き込まれたパスに追加します。もう一度実行してみてください。動作するはずです。
73
J.C. Chaparro

Android Studioでの同じ問題。Unit4の構成を編集するためにこの問題を解決しました。これらに従うことができます。

オンAndroid Studio。

  1. 構成の編集
  2. Junitでは、作業ディレクトリを$ MODULE_DIR $に変更する必要があります。

重要なことは$ MODULE_DIR $です。

次のスクリーンショットを参照できます。ありがとう。

enter image description here

enter image description here

65
Rooney

私は同じエラーに直面しました、私たちはいくつかのフレーバーとビルドタイプを使用しましたので、それを機能させるための手順があります:

  1. Android Studioテストの実行構成

Windowsでも作業ディレクトリを$ MODULE_DIR $に設定する必要があります。 http://robolectric.org/getting-started/ と言ってください。

  1. 単体テストには次のように注釈を付ける必要があります。

    @RunWith(RobolectricTestRunner.class)@Config(constants = BuildConfig.class、sdk = 21、manifest = "src/main/AndroidManifest.xml"、packageName = "com.example.yourproject")public class SomeFragmentTest {

6
Kirill Vashilo

それでもまだAndroid Studio 3.0でこのエラーが発生する場合は、gradle設定に次のパラメーターがあることを確認してください。

Android {
    ...
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}
5
busradeniz

Intellij 16 EAPには、この$ MODULE_DIR $変数の周りにバグがあり(間違った場所を指している)、この例外でテストが失敗することに注意してください。 https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History を参照してください。 2016年1月中旬に修正される予定です。

2

ここで同じ問題を参照できます: https://github.com/robolectric/robolectric/issues/1648

テストコードでこれを言及する必要があります。

_@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)
_

これにより、robolectricにマニフェストファイルの場所がわかります。これは、ディレクトリ値を変更しない限り機能するはずです。

また、インターネットで利用可能なテンプレートを使用してみてください。すべてがそこに設定されています。ディレクトリ値を変更する必要はありません。ここから入手できます: https://github.com/robolectric/deckard-gradle

編集:私が見る方法は例外が "_build/intermediates/bundles/debug/AndroidManifest.xml "_で発生しますが、ファイルは_"app/build/intermediates/manifests/full/debug/AndroidManifest.xml"_にあると言っています。これら2つの場所は異なると思います。xmlファイルが_build/intermediates/bundles/debug/AndroidManifest.xml "_

1
Teja Nandamuri

AndroidStudioを2.3.3に更新し、gradleプラグインも更新した後、このエラーが発生しました。 working directory$MODULE_DIR$に設定し、robolectric依存関係をtestCompile 'org.robolectric:robolectric:3.0'からtestCompile 'org.robolectric:robolectric:3.4.2'に更新することで解決しました。

robolectricバージョンが古いときにworking directoryを設定しても解決されないことに注意してください。

0
Merka
 Hi All Iam new to RoboElectric was facing lot of struggle to run my first test 
please find the below steps which resolves all the issues.
Step 1: use the version in dependencies     
    testImplementation"org.robolectric:robolectric:4.0" in app.gradle    
step 2: 
in app.gradle inside Android use below
testOptions {    
        unitTests {    
            includeAndroidResources = true      
        }    
    }    

ステップ3:gradle.propertiesで以下を貼り付けます
enableUnitTestBinaryResources = true

できます !!!

0
prasanna

それは正しい@Christineです。私も正確な問題に直面しています。そして、ビルドプロセスは、中間物の下にバンドルフォルダーをまったく作成しないということです。また、カスタムのロボットランナーも動作しませんでした。これがカスタム runner 私が使用したものです。私はまだ解決策を理解していませんが、問題は使用する必要があるビルドツールのバージョンに関連しているようです。

[更新]ユニットテスト実行構成の作業ディレクトリを変更して、テスト中のモジュールルートディレクトリを指すようにしました。[更新]

0
kaps