2014-02-12 5 views
8

Согласно this link Я могу создать тестовое приложение, которое Robolectric автоматически начнет использовать в тестах. Я не могу заставить это работать.Robolectric не использует тестовое приложение

Я использую Кинжал для инъекций зависимостей и создал классы обертки для Activity и Application. Затем каждый из моих действий расширяет класс активности оболочки, а не простой старый Activity.

Проблема, с которой я сталкиваюсь, заключается в том, что в тестах зависимости, предоставляемые модулями Application, не могут быть решены, и поэтому тесты терпят неудачу. Это связано с тем, что большинство наших тестов просто создают активность (используя Robolectric.buildActivity()) и не работают с Application.

Я надеялся каким-то образом модифицировать роботизированный испытательный стенд для проведения наших тестов под руководством Application. Либо это, либо использовать тестовое приложение, как указано в этой ссылке выше.

Я создал тестовое приложение и все еще получаю те же ошибки теста, потому что тесты не работают в этом тестовом приложении. Я попытался переместить тестовое приложение на разные пакеты и т. Д., Но ничего не изменилось.

Я ищу советы о том, как делать то, что я хочу. Особенно интересовались бы те, у кого есть опыт работы с кинжалом, и как они проходят тестирование.

+0

Делитесь кодом. Я не могу понять, что «запуск нашего теста в приложении». Мы используем robolectric с кинжалом, и у нас есть тестовое приложение, работающее правильно –

ответ

4

Извинения, забыли об этом. Чтобы решить эту проблему, я создал TestApplication, находясь рядом с тестами. Тогда я изменил наш TestRunner (который расширяет RobolectricTestRunner) для:

public class TestRunner extends RobolectricTestRunner { 

    public TestRunner(final Class<?> testClass) throws InitializationError { 
     super(testClass); 
    } 

    ... 

    @Override 
    protected Class<? extends TestLifecycle> getTestLifecycleClass() { 
     return MyTestLifecycle.class; 
    } 

    public static class MyTestLifecycle extends DefaultTestLifecycle { 
     @Override 
     public Application createApplication(final Method method, final AndroidManifest appManifest) { 
      // run tests under our TestApplication 
      return new TestApplication(); 
     } 
    } 

    ... 

} 
3

Вы можете настроить его в файле org.robolectric.Config.properties

application = <fully qualified name of the Application> 

См http://robolectric.org/configuring/

+1

Просто для обновления в 3.0 это больше не так. Теперь файл называется robolectric.properties. –

8

Это действительно просто в Robolectric 3.0 вы добавляете его непосредственно в аннотацию @Config.

@RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21,application = TestApplication.class) public class ActivityTest {

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