阅读本文大约需要6.66分钟
Google提供的编写单元、功能、性能测试案例的类,通常可以细分为以下几个类:
这个类提供了一个单一的Activity的功能测试。Activity的测试,将使用系统创建的基础设施(通过调用InstrumentationTestCase.launchActivity())来创建,且您能够直接对Activiy进行操作。
这个测试案例支持的其他选项包括:
这个类提供了一个单一的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)
如果您需要访问资源文件或其他依赖于Activity上下文Context 的东西时,可以继承这个类。
这个测试案例提供了一个框架,使您可以在受控环境中测试应用程序类。它提供了应用程序的生命周期 ,可以注入各种依赖的钩子以及控制您的被测应用程序的测试环境的基本支持。
生命周期支持。每个应用程序被设计为方法调用的特定序列内(见 Application 有详细介绍)。为了支持应用程序的生命周期,这个测试用例将在以下时间被调用。
依赖注入。每个应用程序都有一个内在的相关性,即 Context 。该框架允许你注入一个修改,模拟或隔离,这种相关性更换,从而进行真正的单元测试。
如果只是运行测试,你的应用程序将被注入全功能的Context。您可以在调用createApplication() 之前,创建并通过调用setContext()来注入Contexts的替代类。测试框架提供了一些上下文的替代品,其中包括 MockContext , RenamingDelegatingContext ,和 ContextWrapper 。
一个能够访问 Instrumentation 的测试用例
如果你想使用 InstrumentationTestCase 来测试一个单一的内容提供者content provider ,这个类的setUp()和tearDown()提供了一些模板(测试content provider 的必要前提)。
这个测试案例提供了一个框架,使你可以在受控环境中测试服务类。它提供了一个服务的生命周期的基本支持,以及可以注入各种依赖关系的钩子,并控制在您的服务测试环境。
生命周期支持。A服务与调用的特定顺序访问,为中描述的 服务 文档。为了支持服务的生命周期, ServiceTestCase强制执行此协议:
依赖注入。一个服务有两个内在的相关性,其 Context 及其关联 Application 。该ServiceTestCase框架允许你修改注入,模拟或隔离,替代这些依赖,从而在一个孤立的环境控制的依赖进行单元测试。
默认情况下,测试案例被注入一个完整的系统环境和通用 MockApplication 对象。您可以在调用 startService() 或 bindService() 之前,通过调用 setContext() 或 setApplication() 注入替代。测试框架提供了一些上下文的替代品,其中包括 MockContext , RenamingDelegatingContext , ContextWrapper ,和 IsolatedContext 。
如果您想使用 InstrumentationTestCase] 测试一个单一的Activity,这个类在 setUp() 和 tearDown() 中提供了一些启动和结束Activity的模板。这个类整个测试过程中,只启动一次Activity,而不是在每一次 setup / teardown都调用。