Dom*_*erg 11 android servicetestcase
我目前正在为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());
}
Run Code Online (Sandbox Code Playgroud)
但是我注意到我IntentService的创建(意味着onCreate被调用),但我从未接到过调用onHandleIntent(Intent intent)
有人已经IntentService在ServiceTestCase课堂上测试了吗?
谢谢!
这有点晚了,但我只是在努力解决这个问题.您可以通过创建一个简单地覆盖服务的onStart的类来解决这个问题,onHandleIntent直接调用它.例如,如果你有一个LocationUpdaterService,你可以创建一个伪类来覆盖这个onStart函数,如下所示:
public class LocationUpdaterServiceFake extends LocationUpdaterService {
@Override
public void onStart(Intent intent, int startId) {
onHandleIntent(intent);
stopSelf(startId);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
}
现在无论何时打电话startService,它都会绕过IntentService中的线程代码,只需调用你的onHandleIntent函数即可
我刚刚开始测试自己的测试IntentService,事实证明这有点令人头疼。
仍在尝试解决问题,但对于您似乎没有收到对您的方法的调用的情况onHandleIntent(),(我不太了解背后的技术细节junit,所以请原谅我使用术语)这应该是因为测试框架,根据您的代码,一旦您的调用startService返回,实际上会拆除或结束测试方法。没有足够的时间来onHandleIntent触发。
我通过在测试用例中添加无限循环来验证上述理论 - 只有这样我才能在onHandleIntent记录中看到我的日志语句。
| 归档时间: |
|
| 查看次数: |
5201 次 |
| 最近记录: |