방금 CRUD 구현을위한 단위 테스트를 만들었는데 이상한 문제가 있습니다. 테스트가 하나씩 실행되면 모두 통과합니다. 나는 전체 제품군을 실행하고자 할 때, 그들은 오류안드로이드 단위 테스트 - SQLiteReadOnlyDatabaseException : 읽기 전용 데이터베이스 쓰기 시도 (코드 1032)
android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
at android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1367)
at cz.pikadorama.simpleorm.DatabaseSanityTest.testDelete(DatabaseSanityTest.java:55)
실패 여기에 DAO 구현은 항상 sqliteOpenHelper.getWritableDatabase()
으로 쓰기 가능한 데이터베이스를 열고 코드 그런데
@Before
public void prepareDatabase() throws InstantiationException, IllegalAccessException {
Context context = InstrumentationRegistry.getTargetContext();
context.deleteDatabase(DATABASE_NAME);
DbManager.registerHelper(new TestSQLiteHelper(context), new Class<?>[]{TestEntity.class});
}
@Test
public void testDelete() {
Dao<TestEntity> dao = DaoManager.getDao(TestEntity.class);
TestEntity entity = new TestEntity();
dao.create(entity);
dao.delete(entity);
assertEquals(0, dao.findAll().size());
}
// other tests for insert, update, ... follow
입니다.
테스트 사이에 언제든지 데이터베이스를 닫고 있습니까? –
현재'@ Before' 메소드를'@ BeforeClass' 메소드로 변경하십시오. 문제가 해결 되었습니까? – Vasiliy
예, 결국 준비를'@ BeforeClass'로 옮기고 각 테스트 전에 데이터베이스를 삭제하는 대신 데이터베이스를 정리했습니다. – user219882