作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚为我的 CRUD 实现创建了单元测试,但我遇到了这个奇怪的问题。当一项一项地运行测试时,它们都通过了。但是当我想运行整个套件时,它们因错误而失败
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)
这是代码
@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
顺便说一下,DAO 实现总是以 sqliteOpenHelper.getWritableDatabase()
打开可写数据库。
最佳答案
这与 DbManager 和 DaoMaster 是单例(我想也是底层数据库)的事实有关:@Before
中的代码在每次测试之前被调用,这搞砸了可能应该只启动一次的类。
将@Before
注解改为@BeforeClass
,以便只执行一次初始化。
关于Android 单元测试 - SQLiteReadOnlyDatabaseException : Attempt to write a readonly database (code 1032),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40322230/
我是一名优秀的程序员,十分优秀!