2013-12-07 3 views
3

В настоящее время у меня есть setUp() метод в моем ProviderTestCase2. Он выдает NPE в глубину Android API после вызова newResolverWithContentProviderFromSql(). Что я делаю неправильно и как это исправить?NPE в методе setUp() для подкласса ProviderTestCase

public void setUp() throws IllegalAccessException, InstantiationException { 
    this.resolver = newResolverWithContentProviderFromSql(this.getMockContext(), 
      "test.", BaseballCardProvider.class, 
      BaseballCardContract.AUTHORITY, 
      BaseballCardSQLHelper.DATABASE_NAME, 
      BaseballCardSQLHelper.SCHEMA_VERSION, CREATE_TABLE 
        + INSERT_DATA); 
} 

Вот трассировки стека для справки:

java.lang.NullPointerException 
at android.test.RenamingDelegatingContext.openOrCreateDatabase(RenamingDelegatingContext.java:146) 
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:215) 
at android.database.DatabaseUtils.createDbFromSqlStatements(DatabaseUtils.java:1315) 
at android.test.ProviderTestCase2.newResolverWithContentProviderFromSql(ProviderTestCase2.java:219) 
at bbct.android.common.provider.test.BaseballCardProviderTest.setUp(BaseballCardProviderTest.java:44) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584) 
+0

Вы переопределяете 'setUp()' в 'ProviderTestCase2'? Вы должны позвонить в 'super', если это так. –

+1

@ A - C/facepalm спасибо –

ответ

2

Поскольку вы перекрываться setUp(), но не вызывается до super.setUp(), то TestCase не является полным, потому что, как documentation говорит:

Этот фреймворк автоматически устанавливается методом базового класса setUp() . Если вы переопределите этот метод, вы должны вызвать метод super как первый оператор в вашем переопределении.

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