java - Android 项目中的常规 JUnit

标签 java android junit ide

我一直在努力弄清楚如何在我的 Android 应用程序中包含标准 JUnit 3.x(甚至 JUnit4.x)测试。我想在 Android 单元测试工具上使用 JUnit,因为它更快并且可以直接在我的 IDE 中运行(Android JUnit 工具需要首先部署到设备或模拟器)。我还想使用 JUnit 来实现适当的 SoC(关注点分离)。最初我已经设置了多个模块来实现这一点,主要的 Android 模块和一个核心库模块,其中主要模块将具有所有 Android 特性,而核心模块将具有普通旧 Java 对象 (POJO) 和 JUnit 优点。

最近我开始从事一个 Android 项目,我在其中开发了一个库来处理一些低级的 android 特定工作,并将其作为高级操作公开给主模块。问题是我需要在库模块中使用 JUnit,但我不想为此打开另一个模块。在理想的世界中,我会:

主模块:包括所有高级 UI 和 Controller 逻辑,用于在 Activity 、 fragment 等之间导航。取决于 MyLib。

MyLib:包含包装低级逻辑的高级接口(interface),以处理诸如 android 特定网络、持久性、加速度计读取等事情。许多 POJO 涉及一些低级逻辑。还包括一个示例或演示应用程序来直接练习这些接口(interface)。包括在 POJO 上运行 JUnit 的能力。

我是在做白日梦还是有办法使用当前的开发工具智能地设置它?我主要使用 IntelliJ Idea,但也会对 Eclipse 特定的解决方案持开放态度。

最佳答案

直接在 JUnit 测试运行器中运行测试会遇到的问题是您将无法调用任何 com.android.* 类。那是因为 android.jar 中的这些类在您的 SDK 中被删除了。只有这些的 Dalvik 字节代码版本具有仅在模拟器中运行的实际实现。

避免调用 com.android.* 类非常困难,尤其是考虑到如此多的 Android 方法需要上下文。

我也觉得这有点令人沮丧,因为模拟器启动缓慢,执行代码也很慢。这使测试开发变得非常乏味。

我在不使用模拟器的情况下使用 JUnit 测试运行程序的唯一幸运是创建了一个单独的非 Android 项目,该项目指向我的项目文件。这允许我在模拟器之外启动 JUnit,但是我在实际可以测试的类方面非常有限。

关于java - Android 项目中的常规 JUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322958/

相关文章:

java - 如何使用jpa中的选择查询来检索所有数据?

java - NullPoinerException Autowiring bean - Java、Spring

java - Java DOS437 转换为 UTF8

android - 图片无法在 <input type ="file"> Android 4.0.4 上显示

unit-testing - 如何将 JUnit 5 与 Gradle 结合使用?

java - 在java中测试如何检查接口(interface)的方法是否被调用?

java - 在调用的方法中访问 iriInfo

java - 使用 Jersey 接收从 Android 设备发送的 JSON 变量(使用 HttpPost)

javascript - HereMaps JS getZoom() 在捏合缩放操作后返回 0

java - 自定义方法的 JUnit 测试用例