Android测试教程(12):ServiceTestCase示例

ServiceTestCase 为测试Service提供了一个可控的测试环境,它提供对Service 生命周期的基本支持,并可以通过注入一些依赖对象来控制测试环境以便测试Service。

ServiceTestCase的类继承如下图所示:

Service Lifecycle 支持, 每个Service运行 都遵循一定的顺序(生命周期方法),ServiceTestCase提供下面方法来支持对Service生命周期方法的测试:

  • 每个测试方法调用之前首先会执行setUp 方法,setUp 的基本实现是取得系统Context ,如果你要重载setUp 的话,注意在第一行加上super.setUp.
  • 在调用startService(Intent) 或bindService(Intent) 之后,ServiceTestCase才会调用Service的onCreate 方法,从而使你有机会在Service启动之前对测试环境做些调整。
  • 当你的测试方法调用startService(Intent) 或bindService(Intent) 之后,ServiceTestCase 调用Service 的onCreate 方法,然后再调用Service相应的 startService(Intent)或 service 的bindService(Intent, ServiceConnection, int)方法。并保存用于tracking 和支持Lifecycle 对应的值。
  • 每个测试方法结束后,调用tearDown 方法,这个方法stop 并destroy 被测试的service. 如果你需要重载tearDown, 注意先调用super.tearDown.

Dependency Injection 每个Service都依赖于运行它的Context 对象和Application 对象,ServiceTestCase 测试框架允许你注入这些对象(修改过,Mocked等)以实现真正的单元测试.

LocalServiceTest 的代码如下:

public class LocalServiceTest
 extends ServiceTestCase<LocalService> {
 
 public LocalServiceTest() {
 super(LocalService.class);
 }
 
 @Override
 protected void setUp() throws Exception {
 super.setUp();
 }
 
 @SmallTest
 public void testPreconditions() {
 }
 
 /**
 * Test basic startup/shutdown of Service
 */
 @SmallTest
 public void testStartable() {
 Intent startIntent = new Intent();
 startIntent.setClass(getContext(), LocalService.class);
 startService(startIntent);
 }
 
 /**
 * Test binding to service
 */
 @MediumTest
 public void testBindable() {
 Intent startIntent = new Intent();
 startIntent.setClass(getContext(), LocalService.class);
 IBinder service = bindService(startIntent);
 }
 
}


testStartable 测试对应的Service能否正常启动。

testBindable 测试对应的Service能否绑定成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值