在Android Studio中的Android项目中运行快速JUnit测试的最佳方法

在Android Studio中的Android项目中运行快速JUnit测试的最佳方法,第1张

概述我在 Android Studio项目中有一些简单的旧Java类和简单的JUnit测试.他们目前住在我的Android模块中.如果我将它们作为Android测试运行它们会很好地通过,但它们确实很慢,因为它需要启动或连接到模拟器. 如果我尝试运行一个作为JUnit测试,我点击!!! JUnit版本3.8或更高版本预计会出现JUnit版本问题.此answer解释了如何解决该问题.不幸的是,我然后点击j 我在 Android Studio项目中有一些简单的旧java类和简单的JUnit测试.他们目前住在我的AndroID模块中.如果我将它们作为AndroID测试运行它们会很好地通过,但它们确实很慢,因为它需要启动或连接到模拟器.

如果我尝试运行一个作为JUnit测试,我点击!!! JUnit版本3.8或更高版本预计会出现JUnit版本问题.此answer解释了如何解决该问题.不幸的是,我然后点击java.lang.NoClassDefFoundError:junit / textui / ResultPrinter,我无法弄清楚如何修复.

然后我尝试将我的JUnit测试移动到依赖于AndroID模块的单独Java模块中.一切都很好.我添加了一个新配置来启动JUnit测试(:MyJUnitTests:test),但测试失败,包com.myproject.util不存在.看起来类似路径可能不包括依赖AndroID模块中的类.

有人知道如何解决这个类路径问题吗?我看了很多相关的答案,但似乎没有一个对我有用.或者尝试将JUnit测试保存在自己的模块中是一个坏主意?

如果我将普通java类及其JUnit测试移动到一个完全独立的模块(例如here),我可以让JUnit测试快速运行并传递,并反转依赖性,以便AndroID模块依赖于Java模块.这是首选解决方案吗?

解决方法 基本问题是AndroID Framework类在AndroID OS的上下文之外不能很好地工作,因此任何依赖于Framework类的代码都不会在常规JUnit环境中运行,正如您所发现的那样.

您试图将JUnit测试移动到单独模块的解决方案将无法工作,因为您不能拥有依赖于AndroID模块的普通Java模块. AndroID Gradle模块不像Java模块那样,因为AndroID构建要复杂得多,并且因为AndroID模块构建的最终结果将是APK或AAR,其他模块类型将无法理解.

如果您可以将普通的java类和单元测试移动到普通的Java模块中并让AndroID模块依赖于它,那么这将是获得IDE中官方功能支持的最佳方法.它还具有架构优势,因为它可以使这些类免于AndroID抽象,使其更具可移植性,并强制将业务逻辑与UI或存储或其他更具体设备的事物分离.

如果你很难做到这一点,那么很多开发人员都会使用Robolectric,这是一个测试工具,允许依赖AndroID框架的许多部分的代码在没有模拟器或设备的情况下在JUnit环境中运行.它没有得到谷歌的官方支持,但谷歌意识到它已被广泛使用,并努力不要肆意破坏它.

总结

以上是内存溢出为你收集整理的在Android Studio中的Android项目中运行快速JUnit测试的最佳方法全部内容,希望文章能够帮你解决在Android Studio中的Android项目中运行快速JUnit测试的最佳方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1149547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存