2016-06-15 5 views
1

Я получаю странное исключение, когда пытаюсь выполнить класс приложения через robolectric. Я застрял от нескольких часов на нем. Может ли кто-нибудь помочь мне в этом? Мой фрагмент кода приведен ниже:Получение ошибки в классе приложения во время модульного тестирования

java.lang.RuntimeException: Stub! 

at android.test.ApplicationTestCase.__constructor__(ApplicationTestCase.java:5) 
at android.test.ApplicationTestCase.<init>(ApplicationTestCase.java) 
at com.grapplemobile.tmcplus.TmcPlusApplicationTest.<init>(TmcPlusApplicationTest.java:26) 
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217) 
at org.robolectric.RobolectricTestRunner$HelperTestRunner.createTest(RobolectricTestRunner.java:520) 
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) 
at org.robolectric.RobolectricTestRunner$HelperTestRunner.methodBlock(RobolectricTestRunner.java:530) 
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:247) 
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188) 
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Мой код выглядит следующим образом:

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class,sdk = 18) 
public class MyApplicationTest extends ApplicationTestCase<MyApplication>{ 
    private MyApplication application; 

    public MyApplicationTest() 
    { 
     super(MyApplication.class); 
    } 
    @Before 
    public void setUp() throws Exception { 
     // super.setUp(); 
     createApplication(); 
     application = getApplication(); 

    } 

    @Test 
    public void testonCreate() throws Exception { 
    application.onCreate(); 
    } 
+1

Пожалуйста, удалите 'extends ApplicationTestCase'. Вы уже запускаете его из JVM, а не на устройстве. Верный? –

+0

@EugenMartynov: Да, я запускаю его из JVM. Мне нужен экземпляр приложения для моих тестовых случаев, который приходит null. Поэтому я искал, что createApplication() создаст экземпляр приложения. Если я удалю ApplicationTestCase, то как я смогу получить экземпляр приложения? –

+0

Да вы пишете Спасибо тонну! –

ответ

1

Не смешивать JUnit тесты с инструментальными тестов:

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class,sdk = 18) 
public class MyApplicationTest{ 
} 

Если вам нужен экземпляр затем используйте приложение RuntimeEnvironment.application. Если вы хотите протестировать само приложение, просто создайте его с помощью new и вызовите методы на нем, но это не должно быть Robolectric тест