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をプロジェクトにコピーし、ファイルの場所が定義されている行を変更しました。モジュール名が含まれていませんでした。今では動作します。
JUnitでテストを実行しようとしていると仮定しています。次の2つのことを試すことができます。
@Config
アノテーションを使用して、テストランナーで実行するテストを指定します。/app
(OSXおよびLinuxの場合)または\app
(Windows)をテキストボックスに書き込まれたパスに追加します。もう一度実行してみてください。動作するはずです。私は同じエラーに直面しました、私たちはいくつかのフレーバーとビルドタイプを使用しましたので、それを機能させるための手順があります:
Windowsでも作業ディレクトリを$ MODULE_DIR $に設定する必要があります。 http://robolectric.org/getting-started/ と言ってください。
単体テストには次のように注釈を付ける必要があります。
@RunWith(RobolectricTestRunner.class)@Config(constants = BuildConfig.class、sdk = 21、manifest = "src/main/AndroidManifest.xml"、packageName = "com.example.yourproject")public class SomeFragmentTest {
それでもまだAndroid Studio 3.0でこのエラーが発生する場合は、gradle設定に次のパラメーターがあることを確認してください。
Android {
...
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
Intellij 16 EAPには、この$ MODULE_DIR $変数の周りにバグがあり(間違った場所を指している)、この例外でテストが失敗することに注意してください。 https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History を参照してください。 2016年1月中旬に修正される予定です。
ここで同じ問題を参照できます: 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 "
_
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
を設定しても解決されないことに注意してください。
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
できます !!!
それは正しい@Christineです。私も正確な問題に直面しています。そして、ビルドプロセスは、中間物の下にバンドルフォルダーをまったく作成しないということです。また、カスタムのロボットランナーも動作しませんでした。これがカスタム runner 私が使用したものです。私はまだ解決策を理解していませんが、問題は使用する必要があるビルドツールのバージョンに関連しているようです。
[更新]ユニットテスト実行構成の作業ディレクトリを変更して、テスト中のモジュールルートディレクトリを指すようにしました。[更新]