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无法find我的应用程序使用的原始资源。 这是在我的构build文件中:

  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,我已经build立它,安装它在我当地的.m2回购,gradle文件现在指的是本地SNAPSHOT构build,我确信Gradle没有得到一个新版本远程回购。 然后我将RobolectricGradleTestRunner复制到我的项目中,我已经更改了定义文件位置的行:它不包含模块名称。 现在起作用了。

我假设你正在尝试使用JUnit运行testing。 你可以尝试两个不同的东西:

  1. 创build一个自定义TestRunner类,如下所示。 检查CustomTestRunner部分,在那里你基本上创build了一个真正知道要使用的权利清单的TestRunner。 使用@Config注解指定您的testing,让它们与testing运行器一起运行。
  2. (我的首选)进入你的JUnitconfiguration,运行>编辑configuration。 注意“工作目录”文本框。 将/app (用于OSX和Linux)或\app (Windows)添加到写入文本框的path中。 尝试再次运行,它应该工作。

Android Studio的同样的问题。 我已经解决了这个问题来编辑Unit4的configuration。 你可以遵循这些事情。

在Android Studio上。

  1. 编辑configuration
  2. 在Junit中,您必须将工作目录更改为$ MODULE_DIR $。

重要的是$ MODULE_DIR $

你可以参考下面的截图。 谢谢。

在这里输入图像说明

在这里输入图像说明

我面临同样的错误,我们使用了几种口味和build造types所以,有一些步骤,使其工作:

  1. Android Studiotesting运行configuration

您也必须在Windows中将工作目录设置为$ MODULE_DIR $。 http://robolectric.org/getting-started/应该这样说。;

  1. unit testing应该像这样注释:

    @RunWith(RobolectricTestRunner.class)@Config(常量= BuildConfig.class,sdk = 21,manifest =“src / main / AndroidManifest.xml”,packageName =“com.example.yourproject”)public class SomeFragmentTest {

你可以在这里引用同样的问题: https : //github.com/robolectric/robolectric/issues/1648

你应该在你的testing代码中提到这一点:

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

这告诉robolectric您的清单文件在哪里。 这应该工作,除非你改变你的目录值。

也尝试使用互联网上提供的模板。一切都安装在那里。你不需要改变你的目录值。 你可以从这里得到它: https : //github.com/robolectric/deckard-gradle

编辑:我看到的方式是“ build/intermediates/bundles/debug/AndroidManifest.xml "发生的exception,但是你说这个文件是在"app/build/intermediates/manifests/full/debug/AndroidManifest.xml" ,我想这两个是不同的地点。 请确保在build/intermediates/bundles/debug/AndroidManifest.xml "有xml文件build/intermediates/bundles/debug/AndroidManifest.xml "

请注意,intellij 16 EAP在$ MODULE_DIR $variables(它指向错误的位置)附近有一个错误,导致testing失败,出现此exception。 请参阅https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History 。 应该在2016年1月中旬修复。

如果您仍然在Android Studio 3.0中遇到此错误,请确保您的Gradleconfiguration具有以下参数:

 android { ... testOptions { unitTests { includeAndroidResources = true } } } 

这是正确的@Christine。 我也面临着确切的问题。 而构build过程并不是在中间层下创buildbundle文件夹。 而定制的robolectric转轮也没有工作。 这是我使用的自定义运动员 。 我还没有find解决scheme,但似乎这个问题可能与build立需要使用的工具版本有关。

[更新]更改我的unit testing运行configuration中的工作目录,指向正在testing的模块根目录。[更新]

我更新AndroidStudio到2.3.3后,我有这个错误,我的gradle插件也更新了。 它通过将working directory设置为$MODULE_DIR$并且还将robolectrictestCompile 'org.robolectric:robolectric:3.0'testCompile 'org.robolectric:robolectric:3.4.2'

请注意,在robolectric版本旧的时候设置working directory不会解决它。