简介
为了澄清您的问题并安排您所要求的课程,必须先将测试分为两类。 JUnit 测试(理论上是纯 Java)和 仪器测试(它们也是 JUnit 测试包的一部分,但允许您测试更多 SDK Android 相关功能)。
传统的 JUnit 测试会隔离一段代码并运行测试。 Instrumentation 测试更广泛地访问 android 组件。但是仪器测试也来自 JUNIT 包,尽管它们甚至在任何应用程序代码运行之前就在系统中进行了实例化,这解释了为什么速度较慢,此外,它们需要一个模拟器或手机来运行您正在测试的应用程序才能执行。
(在你提到的所有类中都使用粗体,但还有其他更常用的类,我将不使用粗体字符)。
****第一部分**(Junit 测试)**
A) 扩展 TextCase 的 Junit 测试(通常比 Instrumentation 更快,并与 Mock 框架很好地结合)
AndroidTestCase:它允许访问您正在测试的Activity的上下文及其资源,它是一个扩展了更多专业子类的基类,非常适合访问数据库、文件系统数据.您可以轻松调用 getContext() 并访问资源,而无需像仪器测试那样与活动建立直接联系。
ApplicationTestCase 控制您向应用程序发送文本的环境,主要是上下文和生命周期。 AndroidTestCase 的其他真正有用的扩展允许您控制加载器、服务和内容提供程序,但由于某种原因仍然没有任何广播接收器可以使用 InstrumentationRegistry.getTargetContext() 方法 [间接][1] 调用它,然后实例化 BroadCastReceiver .此外,在 Junit 中使用通常比 InstrumentationTests 更快的不同 Mock 框架也很常见
-.-.-.-.-.-.-.-.--
****第二部分**(仪器测试)**
B) 仪器测试, 扩展了 TestCase
被认为是功能测试,更侧重于确保它们与用户端(MVC 的视图部分)很好地配合。它们通常比其他提到的类别慢
InstrumentationTestCase 是一个基类,用于向 UI 发送按键事件以模拟 QWERTY 键盘按键或 DPAD 按钮,它还可以启动必须测试的 Activity,甚至是 Intents
ActivityTestCase 通常不单独使用,它只是有子类的通用代码,但如果你对继承自这个的3个类(见下文)不满意,就像一个新的将来你可以使用它的组件时将不存在一个专用的TestCase 类。
ActivityInstrumentationTestCase2是编写功能测试最常用的Instrumentation类,从构造函数调用Activity的实例进行测试。基本上你用 getActivity() 调用活动,你可以实际运行该活动的任何方法。
ActivityInstrumentationTestCase,已被弃用,尽管在 Instrumentation 下的 ActivityUnitTestCase 更类似于单元测试