【问题标题】:Setting a custom assets directory for unit testing in Android Studio在 Android Studio 中为单元测试设置自定义资产目录
【发布时间】:2014-10-30 06:28:43
【问题描述】:

我们有执行 Android 应用程序的单元测试的常见要求,它使用仅用于单元测试的资产。

使用基于 Eclipse 的 SDK,这很简单明了 - 测试项目是一个单独的项目,有自己的资产文件夹。对于 Android Studio,这意味着在 build.gradle 中配置(或按照惯例)。

我们的单元测试终于开始执行了,但我已经用尽了我找到的关于自定义(理想情况下是合并的)资产文件夹的所有建议。这是我尝试过的:

  • 在 android 闭包中为 sourceSets 添加一个测试闭包(闭包是指 build.gradle 中的大括号之间的那个)。

    androidTest {
        assets.srcDirs = ['src/androidTest/assets/']
    }
    
  • 同样的事情,但使用“test”作为 sourceSet 的名称(与上面的“androidTest”相对)以及“instrumentTest”。

  • 以上的各种组合,加上 androidTest.setRoot("test")、androidTest.setRoot("androidTest"),这两者都会导致我们的单元测试无法被识别(“empty suite”)。

这个问题可以更笼统地表述为“如何在 Android Studio 中使用不同的目录进行单元测试”。

我们已经查看了 Android 的文档,但要么我们不理解它,要么是错误的,要么是某个地方存在错误。

非常感谢任何帮助。

【问题讨论】:

    标签: android unit-testing gradle android-studio


    【解决方案1】:

    我偶然发现了我自己的问题的答案,为此我获得了梦寐以求的“风滚草”奖,该奖项是为那些引起特别明显缺乏兴趣的问题而设的。尽管如此,它可能对某人有用。

    最后,我将把它描述为 Android 的 gradle 构建中的一个错误,但由于没有任何确凿的文档,因此必须保留意见。

    “androidTest/assets”似乎不起作用。但是“调试/资产”确实如此。顺便说一句,“debug/java”也是如此,因此解决方案是将所有测试资源和代码放入调试根目录,单元测试本身除外。

    我还在 build.gradle 中添加了以下修改:

        androidTest {
            assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/', 'src/debug/assets/']
            java.srcDirs = ['src/main/java', 'src/androidTest/java', 'src/debug/java']
        }
    

    现在我有功能单元测试,使用发布版本未知的资产和模拟。

    【讨论】:

    • 似乎谷歌修复了它。我正在使用 Android Studio 0.8.6 + gradle 1.12,并且“androidTest/assets”文件夹无需任何额外脚本即可工作。
    • @weidongxu,我使用的是 1.3.21 (Kotlin),如果属性文件位于 androidTest/assets 下,则在属性文件上调用 getAssets().open() 将不起作用。是否有必要将以上几行放在 build.gradle 中?
    • 对于那些想知道在哪里放置这些 gradle 代码行的人;它是:android -> sourceSets -> androidTest -> ...
    【解决方案2】:

    我不知道以前的情况如何,但我能够创建 Android 插桩单元测试,我可以在其中读取测试资产或生产资产。有关更多信息,请参阅this 答案。

    【讨论】:

    • 您发送的链接非常有用!非常感谢。这应该是公认的答案。
    【解决方案3】:

    我正在使用 Android Studio 1.3 + Gradle 1.2.3 并且 src/androidTest/assets 对我不起作用。我将所有内容都放在了 src/debug 中,而没有对 build.gradle 进行任何更改,并且它起作用了。 Android 似乎在构建 apk 时会自动从调试文件夹中获取项目。

    【讨论】:

      【解决方案4】:

      我发现这个适合我

      android{
          sourceSets {
              androidTest {
                  assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/', 'src/debug/assets/']
                  java.srcDirs = ['src/main/java', 'src/androidTest/java', 'src/debug/java']
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多