首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于IntentService的安卓ServiceTestCase

用于IntentService的安卓ServiceTestCase
EN

Stack Overflow用户
提问于 2011-07-12 23:46:23
回答 5查看 5.4K关注 0票数 11

我目前正在为一个android应用程序编写单元测试,并遇到了以下问题:

我使用ServiceTestCase测试IntentService,如下所示:

代码语言:javascript
复制
@Override
public void setUp() throws Exception {
    super.setUp();      
}

public void testService()
{
    Intent intent = new Intent(getSystemContext(), MyIntentService.class);
    super.startService(intent);     
    assertNotNull(getService());        
}

然而,我注意到我的IntentService被创建了(意味着调用了onCreate ),但我从未收到对onHandleIntent(Intent intent)的调用

有没有人已经用ServiceTestCase类测试过IntentService

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-12 21:48:41

我刚刚开始测试我自己的IntentService,事实证明这有点令人头疼。

我仍然在尝试解决问题,但是对于您似乎没有收到对方法onHandleIntent()的调用的情况(我对junit背后的技术细节不是很在行,所以请原谅我使用的术语),这应该是因为测试框架实际上是基于您的代码,一旦您对startService的调用返回,测试框架就会终止或终止测试方法。没有足够的时间触发onHandleIntent

我在我的测试用例中添加了一个无限循环,从而验证了上述理论-只有这样,我才能在记录的onHandleIntent中看到我的日志语句。

票数 2
EN

Stack Overflow用户

发布于 2013-10-24 05:06:18

这有点晚了,但我只是为此而挣扎。您可以通过创建一个简单地覆盖服务的onStart的类来解决这个问题,这样它就可以直接调用onHandleIntent。因此,例如,如果您有一个LocationUpdaterService,您可以创建一个伪类来覆盖onStart函数,如下所示:

代码语言:javascript
复制
public class LocationUpdaterServiceFake extends LocationUpdaterService {

@Override
public void onStart(Intent intent, int startId) {
    onHandleIntent(intent);
    stopSelf(startId);
}

LocationUpdaterService是IntentService的子类,所以在编写测试时,只需像这样使用LocationUpdaterServiceFake

代码语言:javascript
复制
public class LocationUpdateServiceTest extends ServiceTestCase<LocationUpdaterServiceFake> {

public LocationUpdateServiceTest()
{
    super(LocationUpdaterServiceFake.class);
}

public void testNewAreaNullLocation()
{
    Intent intent = new Intent();
    intent.setAction(LocationUpdaterService.ACTION_NEW_AREA);

    startService(intent);
}

}

现在,无论何时调用startService,它都会绕过IntentService中的线程代码,只调用onHandleIntent函数

票数 6
EN

Stack Overflow用户

发布于 2013-07-04 23:07:51

你只需要添加一个:

代码语言:javascript
复制
Thread.sleep(XXXXXXX); 

在startService之后选择XXXX,然后它会让线程进入onHandleIntent方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6667087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档