问题描述
当试图让Robolectric RC3在Android Studio中工作时,我得到了
While trying to get Robolectric RC3 to work in Android Studio, I get
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中设置清单位置,但没有任何效果.在文件系统中,我看到清单位于
and I tried setting the manifest location in my TestRunner, nothing worked. In the file system I see that the manifest is in
./app/build/intermediates/manifests/full/debug/AndroidManifest.xml
不在Robolectric寻找的位置.在某个时候,清单只是被忽略了,然后资源出现了类似的问题,该应用程序或Robolectric找不到我的应用程序使用的原始资源.这是在我的构建文件中:
not in the location Robolectric is looking for it.At one point the manifest just got ignored, then a similar issue occurred for resources, the app or Robolectric couldn't find a raw resource my app uses.This is in my build file:
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在哪里寻找清单,更重要的是,在哪里寻找资源?
How do I tell Robolectric where to look for a manifest, and more importantly, where to look for resources?
我已经从github中签出了Robolectric,我已经构建了它,并将其安装在我的本地.m2存储库中,gradle文件现在引用了本地SNAPSHOT构建,并且我确保Gradle不会从远程存储库获得新版本.然后,我将RobolectricGradleTestRunner复制到我的项目中,更改了定义文件位置的行:它不包含模块名称.现在可以了.
I have checked out Robolectric from github, I've built it, installed it in my local .m2 repo, the gradle file now refers to the local SNAPSHOT build, and I made sure Gradle doesn't get a new version from a remote repo. Then I copied the RobolectricGradleTestRunner to my project, I have changed the lines where the file locations are defined: it didn't contain the module name. Now it works.
推荐答案
我假设您正在尝试使用JUnit运行测试.您可以尝试两种不同的方法:
I'm assuming you're trying to run the tests with JUnit. You can try two different things:
- 创建一个自定义TestRunner类,如下所示:此处.检查CustomTestRunner部分,在此基本上创建一个实际上知道要使用的正确清单的TestRunner.用
@Config
注释指定要与测试运行程序一起运行的测试. - (我的首选)进入JUnit配置,运行>编辑配置.注意工作目录"文本框.将
/app
(对于OSX和Linux)或\app
(对于Windows)追加到在文本框中写入的路径.尝试再次运行,它应该可以工作.
- Create a Custom TestRunner class, as shown here. Check the CustomTestRunner section, where you basically create a TestRunner that actually knows the right manifest to use. Specify your tests for them to run with your test runner, with the
@Config
annotation. - (My preferred choice) Go the your JUnit configuration, Run > Edit Configurations. Notice the 'Working Directory' textbox. Append
/app
(for OSX and Linux) or\app
(Windows), to the path written in the textbox. Try running again and it should work.
这篇关于Robolectric说“未找到AndroidManifest.xml".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!