1

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

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

主模块:包括所有高级 UI 和控制器逻辑,用于在活动、片段等之间导航。依赖于 MyLib。

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

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

4

2 回答 2

2

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

避免调用 com.android.* 类是非常困难的,特别是考虑到这么多 Android 方法需要一个 Context。

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

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

于 2013-01-14T17:36:34.810 回答
0

简而言之

  • 使用 Junit 测试类和静态方法。
  • 使用 Instrumentation 测试您的应用的点击用户体验响应

仪器入门很痛苦,需要时间来学习。因此,在 hello worlds 中投入大量时间。它是一个全新的世界。

于 2013-01-14T18:24:33.637 回答