gpt4 book ai didi

IntentService 的 Android ServiceTestCase

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:37 24 4
gpt4 key购买 nike

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

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

@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

谢谢!

最佳答案

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

public class LocationUpdaterServiceFake extends LocationUpdaterService {

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

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

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 函数

关于IntentService 的 Android ServiceTestCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com