在我的测试用例中启动服务时不调用onStartCommand()

时间:2013-09-10 11:16:14

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

我有一个测试项目,我的简单测试用例扩展了AndroidTestCase class:

public class MyTest extends AndroidTestCase{
    private Context mContext;

    public MyTest(){
        super();
    }

    @Override
    public void setUp() throws Exception {
           super.setUp();
           mContext = getContext();

           //Start my service
           mContext.startService(new Intent(mContext, MyService.class));
     }

    @Override
    protected void runTest() {
       ...
    }
     ...
}

在上述测试用例的setUp()回调中,我开始MyService

MyService也在我的测试项目的 AndroidManifest.xml 中声明:

 <service
      android:name="com.my.app.services.MyService"/>

MyService.java:

public class MyService extends Service {
   @Override
   public void onCreate() {
    super.onCreate();
    Log.d("MyService", "onCreate()");
    } 

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    Log.d("MyService", "onStartCommand");
   }
   ...
}

但在我运行测试用例之后,我在日志中注意到{strong> onCreate() onStartCommand() MyService的回调被称为。 为什么?我错过了Android测试框架中的服务使用是否有任何特殊规则?

3 个答案:

答案 0 :(得分:1)

AndroidTestCase返回的上下文可能是一个模拟的上下文 - 它可能没有针对startService的实现。你看过http://developer.android.com/tools/testing/service_testing.html吗?

答案 1 :(得分:0)

如果您想使用服务,请使用Service testCase。

答案 2 :(得分:0)

我认为我遇到了同样的问题。我正在尝试测试调用startService的代码,而不是测试服务本身,所以我为测试目的创建了一个新服务。

测试用例似乎可以启动服务,但服务必须是正在测试的主项目的一部分,它们不能成为测试项目的一部分。我不喜欢在我的项目中只有一个测试课程,但因为它似乎是唯一的方式...