public abstract class ServiceTestCase
extends AndroidTestCase
java.lang.Object | ||||
↳ | junit.framework.Assert | |||
↳ | junit.framework.TestCase | |||
↳ | android.test.AndroidTestCase | |||
↳ | android.test.ServiceTestCase<T extends android.app.Service> |
此类在API级别24中已被弃用。
改为使用ServiceTestRule 。 新的测试应该使用Android Testing Support Library编写 。
此测试用例提供了一个框架,您可以在该框架中在受控环境中测试Service类。 它为服务的生命周期提供了基本的支持,并且可以使用这些钩子注入各种依赖关系并控制服务测试的环境。
有关应用程序测试的更多信息,请阅读 Testing开发人员指南。
生命周期支持。 按照Services文档中所述,使用特定的调用顺序访问服务。 为了支持服务的生命周期, ServiceTestCase
强制执行此协议:
setUp()
method is called before each test method. The base implementation gets the system context. If you override setUp()
, you must call super.setUp()
as the first statement in your override. onCreate()
until one of your test methods calls startService(Intent)
or bindService(Intent)
. This gives you an opportunity to set up or adjust any additional framework or test logic before you test the running service. ServiceTestCase.startService()
or ServiceTestCase.bindService()
, the test case calls Service.onCreate()
and then calls either Service.startService(Intent)
or Service.bindService(Intent, ServiceConnection, int)
, as appropriate. It also stores values needed to track and support the lifecycle. tearDown()
method. This method stops and destroys the service with the appropriate calls, depending on how the service was started. If you override tearDown()
, your must call the super.tearDown()
as the last statement in your override. 依赖注入。 服务具有两个固有的依赖关系,其Context
及其相关联的Application
。 ServiceTestCase框架允许您为这些依赖关系注入修改的,模拟的或孤立的替换项,从而在独立的环境中执行具有受控依赖项的单元测试。
默认情况下,测试用例注入完整的系统上下文和一个通用的MockApplication
对象。 您可以通过调用setContext()
或setApplication()
来为其中的任何一个注入替代方法。 您必须在调用startService()或bindService() 之前执行此操作。 测试框架提供了许多用于上下文替代品,包括的MockContext
, RenamingDelegatingContext
, ContextWrapper
,和IsolatedContext
。
Inherited fields |
---|
From class android.test.AndroidTestCase
|
Public constructors |
|
---|---|
ServiceTestCase(Class<T> serviceClass) 构造函数 |
Public methods |
|
---|---|
Application |
getApplication() 返回被测服务正在使用的Application对象。 |
T |
getService() |
Context |
getSystemContext() 返回由 |
void |
setApplication(Application application) 设置测试期间使用的应用程序。 |
void |
testServiceTestCaseSetUpProperly() 测试 |
Protected methods |
|
---|---|
IBinder |
bindService(Intent intent) 在测试开始的服务,就好像它是由开始以同样的方式 |
void |
setUp() 获取当前系统上下文并存储它。 |
void |
setupService() 创建测试中的服务并将所有注入的依赖关系(上下文,应用程序)附加到它。 |
void |
shutdownService() 进行必要的调用以停止(或解除绑定)待测服务,并调用onDestroy()。 |
void |
startService(Intent intent) 启动被测服务,就像 |
void |
tearDown() 关闭待测服务。 |
Inherited methods |
|
---|---|
From class android.test.AndroidTestCase
|
|
From class junit.framework.TestCase
|
|
From class junit.framework.Assert
|
|
From class java.lang.Object
|
|
From interface junit.framework.Test
|
ServiceTestCase (Class<T> serviceClass)
构造函数
Parameters | |
---|---|
serviceClass |
Class : The type of the service under test. |
Application getApplication ()
返回被测服务正在使用的Application对象。
Returns | |
---|---|
Application |
The application object. |
也可以看看:
T getService ()
Returns | |
---|---|
T |
An instance of the service under test. This instance is created automatically when a test calls startService(Intent) or bindService(Intent) . |
Context getSystemContext ()
返回由setUp()
保存的实际系统上下文。 用它为被测服务创建模拟或其他类型的上下文对象。
Returns | |
---|---|
Context |
A normal system context. |
void setApplication (Application application)
设置测试期间使用的应用程序。 如果您不调用此方法,则使用新的MockApplication
对象。
Parameters | |
---|---|
application |
Application : The Application object that is used by the service under test. |
也可以看看:
void testServiceTestCaseSetUpProperly ()
测试setupService()
正确运行并发出assertNotNull(String, Object)
如果有)。 如果您愿意,您可以重写此测试方法。
Throws | |
---|---|
异常 |
IBinder bindService (Intent intent)
启动被测服务,就像 Context.bindService(Intent, ServiceConnection, flags)
使用标识服务的 Intent
启动服务一样。
注意参数是不同的。 您不提供ServiceConnection
对象或flags参数。 相反,你只提供意图。 该方法返回一个类型为IBinder
的子类的IBinder
,如果该方法失败,则返回null。 IBinder对象是指应用程序和服务之间的通信通道。 该标志假定为BIND_AUTO_CREATE
。
有关此方法返回的通信通道对象的更多信息,请参阅 Designing a Remote Interface Using AIDL 。
Note: To be able to use bindService in a test, the service must implement getService() method. An example of this is in the ApiDemos sample application, in the LocalService demo.Parameters | |
---|---|
intent |
Intent : An Intent object of the form expected by bindService(Intent, ServiceConnection, int) . |
Returns | |
---|---|
IBinder |
An object whose type is a subclass of IBinder, for making further calls into the service. |
void setUp ()
获取当前系统上下文并存储它。 扩展此方法以执行您自己的测试初始化。 如果你这样做,你必须调用super.setUp()
作为你的覆盖的第一条语句。 在每个测试方法执行之前调用该方法。
Throws | |
---|---|
异常 |
void setupService ()
创建测试中的服务并将所有注入的依赖关系(上下文,应用程序)附加到它。 这由startService(Intent)
或bindService(Intent)
自动bindService(Intent)
。 如果您需要拨打setContext()
或setApplication()
,请在调用此方法之前执行此操作。
void shutdownService ()
进行必要的调用以停止(或解除绑定)待测服务,并调用onDestroy()。 通常这会自动调用(通过tearDown()
,但您可以直接从您的测试中调用它以检查是否有正确的关闭行为。
void startService (Intent intent)
启动被测服务,就像Context.startService(Intent)
使用标识服务的Intent
启动服务一样。 如果您使用此方法启动该服务,则它会自动停止tearDown()
。
Parameters | |
---|---|
intent |
Intent : An Intent that identifies a service, of the same form as the Intent passed to Context.startService(Intent) . |
void tearDown ()
关闭待测服务。 在进行下一个测试之前,确保清理所有资源并收集垃圾。 这种方法在每种测试方法之后被调用。
覆盖此方法的子类必须调用 super.tearDown()
作为最后一个语句。
Throws | |
---|---|
异常 |