私は多くの同様の質問を見つけましたが、私の質問に正確に答えたものはありません。 アンドロイドでSQLliteOpenHelperクラスの単体テストを行う最善の方法は何ですか?SQLiteOpenHelperクラスをテストするときにコンテキストヌル
マイエラー:
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)
コード:
@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);
}
}
あなたのエラーは 'deleteDatabase()'呼び出しから来ています。あなたの質問のコードには 'deleteDatabase()'呼び出しはありません。 Javaスタックトレース全体と、そのスタックトレースで参照されているソースコードを投稿してください。また、 'AndroidTestCase'は' @RunWith(AndroidJUnit4.class) 'では動作しない可能性があり、いずれにしても非難されています。テストされているアプリケーションまたはライブラリコードの 'Context'を取得するには、' InstrumentationRegistry.getTargetContext() 'を使用してください。 – CommonsWare
展開スタックトレースを追加 –