使用 Android Studio 和 Gradle 进行单元测试?

2023-11-26

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

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

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

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

当我现在选择运行“所有测试”在 test/java 文件夹中,它给了我一个 UnsupportedOperationException 。

我缺少什么?如何运行 Android 项目的单元测试?

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

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


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

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

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

我必须在 Android Studio 中运行它来创建一个 JUnit(而不是 Android)测试运行器。 它可能无法开箱即用,因为类路径顺序混乱(尽管仅通过在 gradle 中运行测试就可以正常工作)。

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

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

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

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

由于我在预览版软件中发现了许多问题以及我必须查阅大量信息来解决这些问题,所以我现在拥有很多分散的知识,但如果您对该主题有更具体的问题,请告诉我: )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android Studio 和 Gradle 进行单元测试? 的相关文章

随机推荐