我一直在努力弄清楚如何在我的 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/