3

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

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"/>

我的服务.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");
   }
   ...
}

但是在我运行我的测试用例之后,我从日志中注意到 onCreate() 没有 onStartCommand()调用也没有调用回调MyService为什么?我错过了适用于 Android 测试框架中的服务使用的任何特殊规则吗?

4

3 回答 3

1

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

于 2013-09-10T11:37:34.347 回答
0

如果您想体验服务,请使用 ServicetestCase。

于 2013-09-10T11:42:00.117 回答
0

我一直有同样的问题,我想。我正在尝试测试调用 startService 的代码,而不是测试服务本身,因此我创建了一个新服务用于测试目的。

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

于 2014-03-11T13:23:21.250 回答