3

У меня есть тестовый проект, мой простой тест расширяет AndroidTestCase класс:onStartCommand() не вызывается при запуске службы в моем тестовом случае

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"); 
    } 
    ... 
} 

Но после того, как я запускаю мой тестовый случай, я заметил от лога, что неonCreate()илиonStartCommand() были вызваны обратные вызовы MyService. Почему? Есть ли какое-либо специальное правило, применяемое к использованию Сервиса в Android Test Framework, которое я пропустил?

+0

Я не думаю, что смогу ответить на этот вопрос :(нам нужен кто-то более опытный –

+0

Я думаю, что вы забыли упомянуть имя службы в файле манифеста. В таком случае вы не сообщаются системой о произошедшей ошибке. – Khay

ответ

1

Контекст, возвращаемый AndroidTestCase, вероятно, является издеваемым контекстом - он, вероятно, не имеет реализации для startService. Вы читали http://developer.android.com/tools/testing/service_testing.html?

+0

Но мой тестовый пример не предназначен для проверки моего сервиса, поэтому я не знаю, t использовать специализированную тестовую среду. Я тестирую что-то еще, но я хотел бы, чтобы моя служба работала, чтобы выполнить некоторую работу в это время. – Mellon

0

Если вы хотите wowk с сервисом, используйте ServicetestCase.

+0

MyTest.this не является экземпляром контекста, вы не можете этого сделать. У меня есть onBind в моем классе сервиса. – Mellon

+0

use mContext = getApplicationContext или getBaseContext(). Может быть, это сработает. –

+0

pratik, спасибо за ваш ответ b Вы использовали AndroidTestCase раньше? Не могли бы вы показать мне, как я могу вызвать getApplicationContext или getBaseContext в классе AndroidTestCase? В этом классе доступен только метод getContext() – Mellon

0

У меня была такая же проблема, я думаю. Я пытаюсь проверить код, который вызывает startService, а не тестировать сам сервис, поэтому я создал новую услугу для тестирования.

Похоже, что тестовые примеры могут запускать службы, но услуги должны быть частью основного тестируемого проекта, они не могут быть частью тестового проекта. Мне не очень нравится иметь только тестовый класс в моем проекте, но, поскольку он, кажется, единственный способ ...

Смежные вопросы