为什么我需要在测试用例中启动/绑定我的服务,即使该服务在后台运行

时间:2013-10-10 14:05:48

标签: android performance android-intent android-service android-testing

在我的Android项目中,我有活动

public MyActivity extends Activity{
    ...
    @Override
    protected void onStart() {
    super.onStart();
        Intent intent = new Intent(this, MyService.class)
        startService(intent);
    }
}

onStart()的{​​{1}}中,我刚开始MyActivity

我的简单服务仅用于收听手机状态更改

MyService

一切正常,启动我的应用程序后,当我拨打电话时,我的服务正在听电话状态变化&显示吐司信息。

NEXT ,我决定对我的项目进行单元测试,因此我在测试项目中创建了public MyService extends Service{ @Override public int onStartCommand(Intent intent, int arg, int id) { super.onStartCommand(intent, arg, id); /*register a PhoneStateListener to TelephonyManager*/ startToListenToPhoneState();// show Toast message for phone state change return START_STICKY; } }

AndroidTestCase

上面的测试案例只是打开一个电话,它也可以正常工作。

我按下HOME按钮将我的应用程序带到后台,之后,我运行测试用例开始打电话,我期待我服务中的public class MySimpleTest extends AndroidTestCase{ ... @Override protected void runTest() { //make a phone call String url = "tel:3333"; Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url)); mContext.startActivity(mIntent); } } 仍在运行,以显示我Toast消息,但它没有

然后我发现在我的测试用例中我必须开始绑定 PhoneStateListener,之后我才能看到toast信息来自PhoneStateListener,当我运行我的测试用例时,为什么?我的意思是为什么我的服务在我的应用程序的后台运行,但我仍然需要在测试用例中启动或绑定服务为了在运行MyService时触发MyService中定义的PhoneStateLister?

1 个答案:

答案 0 :(得分:0)

在Android ServiceTestCase文档中,它说,

  

测试用例等待调用onCreate(),直到你的一个测试方法调用startService(Intent)或bindService(Intent)。这使您有机会在测试正在运行的服务之前设置或调整任何其他框架或测试逻辑。

我认为AndroidTestCase提供了一个框架,您可以在受控环境中测试您的活动,服务等,这样您至少应该在测试与服务交互之前启动服务。

参考:http://developer.android.com/reference/android/test/ServiceTestCase.html