Robolectric说"找不到AndroidManifest.xml"

Chr*_*ine 42 android robolectric android-studio android-gradle-plugin

在尝试让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)
Run Code Online (Sandbox Code Playgroud)

我试过了

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

我尝试在我的TestRunner中设置清单位置,没有任何效果.在文件系统中,我看到清单在

./app/build/intermediates/manifests/full/debug/AndroidManifest.xml
Run Code Online (Sandbox Code Playgroud)

不在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']
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何告诉Robolectric在哪里寻找清单,更重要的是,在哪里寻找资源?

编辑:我已经从github检查了Robolectric,我已经构建了它,将它安装在我当地的.m2 repo中,gradle文件现在引用了本地SNAPSHOT构建,我确保Gradle没有从一个新版本获得远程回购.然后我将RobolectricGradleTestRunner复制到我的项目中,我更改了定义文件位置的行:它不包含模块名称.现在它有效.

J.C*_*rro 73

我假设您正在尝试使用JUnit运行测试.你可以尝试两种不同的东西:

  1. 创建自定义的TestRunner类,如这里.检查CustomTestRunner部分,您基本上创建一个实际知道要使用的正确清单的TestRunner.使用@Config注释为测试运行器指定它们的测试.
  2. (我的首选)转到JUnit配置,运行>编辑配置.请注意"工作目录"文本框.将/app(对于OSX和Linux)或\app(Windows)附加到文本框中写入的路径.尝试再次运行它应该工作.

  • 更好的解决方案是按照Robolectric入门页面上的建议将工作目录设置为$ MODULE_DIR $,http://robolectric.org/getting-started/ (11认同)
  • 是的,添加"app"字符串证明是必不可少的. (3认同)
  • 如果您使用CI怎么办? (2认同)

小智 65

Android Studio上的问题相同.我已经解决了这个问题来编辑Unit4的配置.你可以遵循这些事情.

在Android Studio上.

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

重要的是$ MODULE_DIR $.

您可以参考以下屏幕截图.谢谢.

在此输入图像描述

在此输入图像描述

  • 这是正确的答案.这是一个影响Mac用户的问题.这实际上记录在Robolectric入门页面http://robolectric.org/getting-started/上. (2认同)

Kir*_*ilo 6

我遇到了同样的错误,我们使用了几种口味和构建类型因此,有一些步骤可以使它工作:

  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 {

  • 确保您正在导入正确的Bui​​ldConfig - 我没有注意并从库中提取BuildConfig,导致与OP类似的问题. (3认同)

bus*_*niz 5

如果您仍然在Android Studio 3.0中收到此错误,请确保您的gradle配置包含以下参数:

android {
    ...
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)