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。 你可以尝试两个不同的东西:
- 创build一个自定义TestRunner类,如下所示。 检查CustomTestRunner部分,在那里你基本上创build了一个真正知道要使用的权利清单的TestRunner。 使用
@Config
注解指定您的testing,让它们与testing运行器一起运行。 - (我的首选)进入你的JUnitconfiguration,运行>编辑configuration。 注意“工作目录”文本框。 将
/app
(用于OSX和Linux)或\app
(Windows)添加到写入文本框的path中。 尝试再次运行,它应该工作。
Android Studio的同样的问题。 我已经解决了这个问题来编辑Unit4的configuration。 你可以遵循这些事情。
在Android Studio上。
- 编辑configuration
- 在Junit中,您必须将工作目录更改为$ MODULE_DIR $。
重要的是$ MODULE_DIR $ 。
你可以参考下面的截图。 谢谢。
我面临同样的错误,我们使用了几种口味和build造types所以,有一些步骤,使其工作:
- Android Studiotesting运行configuration
您也必须在Windows中将工作目录设置为$ MODULE_DIR $。 http://robolectric.org/getting-started/应该这样说。;
-
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$
并且还将robolectric
从testCompile 'org.robolectric:robolectric:3.0'
为testCompile 'org.robolectric:robolectric:3.4.2'
。
请注意,在robolectric
版本旧的时候设置working directory
不会解决它。