转载

Android TestCase有哪些?

Android TestCase有哪些?

阅读本文大约需要6.66分钟

Google提供的编写单元、功能、性能测试案例的类,通常可以细分为以下几个类:

ActivityInstrumentationTestCase2

这个类提供了一个单一的Activity的功能测试。Activity的测试,将使用系统创建的基础设施(通过调用InstrumentationTestCase.launchActivity())来创建,且您能够直接对Activiy进行操作。

这个测试案例支持的其他选项包括:

  • 您可以在UI线程运行任何测试方法 (见 UiThreadTest )。
  • 您可以注入自定义的Intent到你的活动(见 setActivityIntent(Intent) )。
  • 该类取代了 ActivityInstrumentationTestCase ,它被废弃了。新的测试应该使用这个基类来写。

ActivityUnitTestCase

这个类提供了一个单一的Activity独立测试。Activity的测试,将用最小的连接到系统的基础设施来创建,您可以注入mocked或包装Activity所依赖的许多版本(原文: wrappered versions of many of Activity’s dependencies 暂不理解其含义)。大部分的工作都是通过通过 setUp() 和 tearDown() 自动处理的。

必须指出的是,作为一个真正的单元测试,您的Activity将不会在正常的系统运行,并且将不参加与其它Activity的正常相互作用。下面的方法在这个配置中,不应该被调用 - 它们大多会抛出异常:

  • createPendingResult(int, Intent, int)

  • startActivityIfNeeded(Intent, int)

  • startActivityFromChild(Activity, Intent, int)

  • startNextMatchingActivity(Intent)

  • getCallingActivity()

  • getCallingPackage()

  • createPendingResult(int, Intent, int)

  • getTaskId()

  • isTaskRoot()

  • moveTaskToBack(boolean)

以下方法可以调用,但不会做任何事情。出于测试目的,您可以使用 getStartedActivityIntent() ,并 getStartedActivityRequest() 方法来检查它们被调用时所携带的参数。

  • startActivity(Intent)

  • startActivityForResult(Intent, int)

以下方法可以调用,但不会做任何事情。出于测试目的,您可以使用isFinishCalled(),并 getFinishedActivityRequest() 检查它们被调用时所携带的参数。

  • finish()

  • finishFromChild(Activity)

  • finishActivity(int)

AndroidTestCase

如果您需要访问资源文件或其他依赖于Activity上下文Context 的东西时,可以继承这个类。

ApplicationTestCase

这个测试案例提供了一个框架,使您可以在受控环境中测试应用程序类。它提供了应用程序的生命周期 ,可以注入各种依赖的钩子以及控制您的被测应用程序的测试环境的基本支持。

生命周期支持。每个应用程序被设计为方法调用的特定序列内(见 Application 有详细介绍)。为了支持应用程序的生命周期,这个测试用例将在以下时间被调用。

  • 测试用例不会调用onCreate(),直到测试中调用了createApplication()方法。这使得在onCreate被调用之前,您可以设置额外的框架或测试逻辑。
  • 测试完成后,测试案例的tearDown()方法被自动调用,并且它将调用onDestroy()方法来暂停或销毁应用程序。

依赖注入。每个应用程序都有一个内在的相关性,即 Context 。该框架允许你注入一个修改,模拟或隔离,这种相关性更换,从而进行真正的单元测试。

如果只是运行测试,你的应用程序将被注入全功能的Context。您可以在调用createApplication() 之前,创建并通过调用setContext()来注入Contexts的替代类。测试框架提供了一些上下文的替代品,其中包括 MockContext , RenamingDelegatingContext ,和 ContextWrapper 。

InstrumentationTestCase

一个能够访问 Instrumentation 的测试用例

ProviderTestCase

如果你想使用 InstrumentationTestCase 来测试一个单一的内容提供者content provider ,这个类的setUp()和tearDown()提供了一些模板(测试content provider 的必要前提)。

ServiceTestCase

这个测试案例提供了一个框架,使你可以在受控环境中测试服务类。它提供了一个服务的生命周期的基本支持,以及可以注入各种依赖关系的钩子,并控制在您的服务测试环境。

生命周期支持。A服务与调用的特定顺序访问,为中描述的 服务 文档。为了支持服务的生命周期, ServiceTestCase强制执行此协议:

  • setUp() 方法是每个测试方法之前调用。基实现获取系统环境。如果覆盖 setUp() ,您必须在覆盖的第一条语句调用 super.setUp()
  • 直到你的测试调用 startService(Intent)bindService(Intent) ,测试用例才调用 onCreate() 。这使得在服务运行之前,您可以设置或调整任何额外的框架或测试逻辑。
  • 当任一测试方法调用 ServiceTestCase.startService()ServiceTestCase.bindService() 时, Service.onCreate() 被调用。 Service.startService(Intent)Service.bindService(Intent, ServiceConnection, int) 可以根据需要调用。它还存储需要被跟踪的值,也支持生命周期。
  • 每个测试方法完成之后 ,测试用例调用 tearDown() 方法。这个方法根据服务的启动方式,适当地停止或销毁服务 。如果要重写 tearDown() ,你必须在重写方法中的最后一条语句 调用 super.tearDown()

依赖注入。一个服务有两个内在的相关性,其 Context 及其关联 Application 。该ServiceTestCase框架允许你修改注入,模拟或隔离,替代这些依赖,从而在一个孤立的环境控制的依赖进行单元测试。

默认情况下,测试案例被注入一个完整的系统环境和通用 MockApplication 对象。您可以在调用 startService()bindService() 之前,通过调用 setContext()setApplication() 注入替代。测试框架提供了一些上下文的替代品,其中包括 MockContextRenamingDelegatingContextContextWrapper ,和 IsolatedContext

SingleLaunchActivityTestCase

如果您想使用 InstrumentationTestCase] 测试一个单一的Activity,这个类在 setUp()tearDown() 中提供了一些启动和结束Activity的模板。这个类整个测试过程中,只启动一次Activity,而不是在每一次 setup / teardown都调用。

原文  http://yoyoyoky.github.io/2017/01/14/Android-TestCase有哪些?/
正文到此结束
Loading...