【问题标题】:Android gradle src/androidTest/res/layout/mylayout.xml not found in mypackage.R在 mypackage.R 中找不到 Android gradle src/androidTest/res/layout/mylayout.xml
【发布时间】:2014-07-01 19:57:52
【问题描述】:

我正在 Android Studio 中使用 gradle 编写单元测试。我的测试位于:

src/androidTest/java

效果很好。现在在我的测试中,我想访问在以下位置定义的资源:

src/androidTest/res

具体来说,我想获取 src/androidTest/res/layout/mylayout.xml。问题是我的测试包的 R 类或任何与此相关的包都定义了 mylayout。

我在我的 build.gradle 上做了这个,但没有任何区别:

sourceSets {
    androidTest.resources.srcDirs = ['src/res']
}

如何向 androidTest 类提供仅对 androidTest 可见的资源?

【问题讨论】:

  • 为什么您需要提供仅用于测试的资源?
  • 当您编写特别针对网络协议的测试时,您需要定义一组可以工作的样本数据和不能工作的样本数据。将这些资源包含在应用程序中是荒谬的,因为它们除了测试之外没有其他用途。

标签: java android xml r.java-file


【解决方案1】:

对我来说,解决方案是将源文件放在src/androidTest/java 中,将资源文件放在src/androidTest/res 中。这些是标准位置,因此您无需在 gradle.build 中编辑任何内容。

另外,将您的 R 导入重命名为

import com.mycompany.myappname.R;

import com.mycompany.myappname.test.R;

来源:Configuring res srcDirs for androidTest sourceSet

【讨论】:

  • 这对我有帮助,尽管您不能同时导入测试和常规“R”类。由于我也想在测试中使用我的应用程序资源 ID,因此我必须使用完全限定的类名来引用测试应用程序的“R”文件,即int someId = com.mycompany.myappname.test.R.raw.some_raw_resource;
  • @aaronmarino 我也得到了同样的结果。
【解决方案2】:

我找到了解决方案,将其添加到您的 build.gradle 文件中。

sourceSets {
    androidTest {
        java.srcDirs = ['src/androidTest/src']
        resources.srcDirs = ['src/androidTest/src']
    }
}

【讨论】:

  • 我也没有让这个对我有用。目前使用 'com.android.tools.build:gradle:0.13.+' 并安装了 Gradle 2.1。将路径稍微更改为“src/androidTest/java”和“src/androidTest/res”。通过语法,它似乎应该工作。有趣的是,我可以看到正在为我的测试文件夹中的布局生成中间资源文件(合并前)。有人得到这个工作吗?请? :-)
  • 耻辱。我再次遇到同样的错误,这不再起作用了。
  • 这应该是这些文件夹的默认设置,但我发现对于库项目,这些被忽略:stackoverflow.com/questions/31039257/…
  • 我对基于应用程序的项目所做的其他测试表明,这些文件夹已被使用......但任何 ID 都没有添加到 R 文件中,因此不可用......而且, androidTest .xml 文件不能引用任何主要的维度或字符串值(它们仅限于 androidTest 中的值)。 :(
  • 有人找到解决这个问题的方法吗?我也在为此苦苦挣扎
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多