Android 测试SQLiteOpenHelper类时上下文为null

Android 测试SQLiteOpenHelper类时上下文为null,android,sqlite,unit-testing,Android,Sqlite,Unit Testing,我发现了很多类似的问题,但没有一个能准确回答我的问题。 在android中对SQLliteOpenHelper类进行单元测试的最佳方法是什么 我的错误: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Context.deleteDatabase(java.lang.String)' on a null object reference at android.tes

我发现了很多类似的问题,但没有一个能准确回答我的问题。 在android中对SQLliteOpenHelper类进行单元测试的最佳方法是什么

我的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean
android.content.Context.deleteDatabase(java.lang.String)' on a null object reference
at android.test.RenamingDelegatingContext.openOrCreateDatabase(RenamingDelegatingContext.java:157)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at  android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at uk.co.ticking_clock.reptilekeeper.data.AnimalOperationsTest.pet_defaultEntries(AnimalOperationsTest.java:36)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
代码:


getContext()
将返回
null
。正如我在评论中指出的,
AndroidTestCase
可能无法与
@RunWith(AndroidJUnit4.class)
一起使用,并且在任何情况下都被弃用。使用
InstrumentationRegistry.getTargetContext()
获取正在测试的应用程序或库代码的
上下文

getContext()
将返回
null
。正如我在评论中指出的,
AndroidTestCase
可能无法与
@RunWith(AndroidJUnit4.class)
一起使用,并且在任何情况下都被弃用。使用
InstrumentationRegistry.getTargetContext()
获取正在测试的应用程序或库代码的
上下文

您的错误来自
deleteDatabase()
调用。您的问题中没有
deleteDatabase()
调用代码。请发布整个Java堆栈跟踪,以及在该堆栈跟踪中引用的源代码。另外,
AndroidTestCase
可能无法与
@RunWith(AndroidJUnit4.class)
一起使用,并且在任何情况下都被弃用。使用
InstrumentationRegistry.getTargetContext()
获取正在测试的应用程序或库代码的
上下文。扩展堆栈跟踪添加您的错误来自
deleteDatabase()
调用。您的问题中没有
deleteDatabase()
调用代码。请发布整个Java堆栈跟踪,以及在该堆栈跟踪中引用的源代码。另外,
AndroidTestCase
可能无法与
@RunWith(AndroidJUnit4.class)
一起使用,并且在任何情况下都被弃用。使用
InstrumentationRegistry.getTargetContext()
获取正在测试的应用程序或库代码的
上下文
。添加了扩展堆栈跟踪
InstrumentationRegistry.getTargetContext()
是解决方案。我没有看到任何关于
AndroidtestCase
在文档Think?@DavidFinder中被弃用的提及:所有原始测试类(例如
AndroidtestCase
)在N开发者预览中都被弃用。据推测,当Android的下一个发布版本出现时,它们仍将被弃用。
InstrumentationRegistry.getTargetContext()
是解决方案。我没有看到任何关于
AndroidtestCase
在文档Think?@DavidFinder中被弃用的提及:所有原始测试类(例如
AndroidtestCase
)在N开发者预览中都被弃用。据推测,在Android的下一个发布版本中,它们仍将被弃用。
@RunWith(AndroidJUnit4.class)
public class DatabaseOperationsTest extends AndroidTestCase {
private MyDbHelper testDb;

@Before
public void setUp() throws Exception {
    super.setUp();
    RenamingDelegatingContext context = new RenamingDelegatingContext(getContext(), "test_");
    testDb = MyDbHelper.getInstance(context);
}

@After
public void tearDown() {
    testDb = null;
}

@Test
public void pet_defaultEntries() {
    SQLiteDatabase db = testDb.getWritableDatabase();
    Cursor textDb = db.rawQuery("SELECT name FROM tableOne", null);

    int expected = 2;
    int actual = textDb.getCount();

    Assert.assertTrue(expected  == actual);

}
}