【问题标题】:Unit tests with Android Studio and Gradle?使用 Android Studio 和 Gradle 进行单元测试?
【发布时间】:2014-02-19 09:41:32
【问题描述】:

如何在 Android Studio (IntelliJ) 中轻松地将单元测试添加到我的 Android 项目中?

更准确地说:我想添加一个包含测试代码(JUnit 4)的文件夹,并使用常规安装的 JDK(不在 Android 模拟器中)从那里执行单元测试。 到目前为止,我将文件夹“test/java/”添加到我的模块中,并将“test”添加为源集,将 junit 添加为测试依赖项:

sourceSets {
  instrumentTest.setRoot('src/test')
}

dependencies {
  instrumentTestCompile 'junit:junit:4.+'
  // ...
}

当我现在在 test/java 文件夹中选择 Run 'All Tests' 时,它会给我一个 UnsupportedOperationException。

我错过了什么?您如何为 Android 项目运行单元测试?

推荐一个在 Eclipse 中像“Infinitest”一样工作的插件的奖励积分 - 我可以简单地保存一个类并自动执行它的单元测试。 :-)

PS:我不想使用https://github.com/JakeWharton/gradle-android-test-plugin,因为该插件似乎已经被弃用了。

【问题讨论】:

    标签: android unit-testing junit gradle android-studio


    【解决方案1】:

    过去几周我也一直在做这件事。 实际上,关于类固醇,因为我还必须将 Robolectric 放入锅中。

    简短回答:除非我将该错误与其他错误混淆,否则我认为您正在尝试使用 Android 测试运行程序运行单元测试。

    长答案: 我最终使用了已弃用的插件(在尝试之后,然后尝试将测试放入 androidTest 文件夹),因为它为我解决了 Jenkins 上的很多问题。 缺点是它不会将文件夹本身识别为 java 或 android 代码,因此代码完成适用于除文件夹内容之外的所有内容(例如,它正确地看到了基础项目和所有依赖项)。

    我必须在 Android Studio 中运行它是创建一个 JUnit(不是 Android)测试运行程序。 它可能无法开箱即用,因为类路径顺序被弄乱了(尽管只需在 gradle 中运行测试就可以正常工作)。

    基本上我必须做的手动步骤是:

    1. 运行 junit testrunner 以查看 AS 使用的命令行
    2. 编辑-classpath 参数,执行以下操作:

      • 将 junit > 3.8 移到字符串的顶部(我猜是因为否则你会在 android 中得到那个,它太旧了)
      • 如果引用 robolectric 则将其移至第二个,否则将在 robolectric 之前找到真正的 android 方法
      • 将您的测试类输出路径附加到末尾,以便它可以找到您的测试(请记住以“测试”结束您的测试类,否则将找不到它们)
    3. 将您刚刚创建的-classpath 附加到-ea 之后的运行器VM 选项中 (我在很多地方都找到了这个解决方案或其中的一部分,一个非常好的解决方案是:http://kostyay.name/android-studio-robolectric-gradle-getting-work/,它也适用于简单的单元测试)。

    今天早上有人提出了一个我没有尝试但我考虑过的替代方案(见上一篇文章): https://groups.google.com/forum/#!topic/adt-dev/Y8-ppkWell0

    我现在有很多零散的知识,因为我在预览软件中发现了许多问题,并且我必须通过大量信息来解决这些问题,但是如果您对此主题有更具体的问题,请让我知道:)

    【讨论】:

    • 在最新的 Gradle 插件中,'instrumentTest' 没有被替换为 'androidTest' 吗?
    • 更新了我的答案,谢谢。但是这个答案很快就过时了,因为在 AS 中进行单元测试的所有工作都在进行(尽管我仍然使用已弃用的插件,因为我没有找到任何稳定的解决方案可以迁移)。
    【解决方案2】:

    我认为答案现在应该已经在 Android Studio 1.1(和当前的 gradle 插件)中了。 他们引入了单元测试支持。 它仍然是实验性的,但比我们之前的努力要少:) 见here

    【讨论】:

    • 这才是真正的解决方案!最后他们内置了真正的单元测试支持。此外,JUnit 4.x!他们从 android.jar 中删除了所有“最终”类,所以我们也可以模拟 Android 的东西! :-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多