我目前正在使用 SQLiteDatabase 编写应用程序。现在我不确定特别是用于测试的上下文。我创建了一个 MyApplication 类,它从 Application 派生出来,并作为 DbHelper 的上下文,我使用了这个实例,如果我手动测试我的应用程序,它就可以正常工作。
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
lateinit var instance: MyApplication
private set
}
}
我有一些仪器测试(Junit4 和 Espresso),它们测试数据库本身的一般功能以及应用程序功能。对于此测试,显然必须修改数据库。
我现在的问题是:Espresso/Junit 测试是否有可能不修改我的数据库。我尝试使用事务:
@Before
fun init()
{
dbHelper.writabledatabase.beginTransaction()
}
@After
fun teardown()
{
dbHelper.writabledatabase.endTransaction()
}
一般工作,但有时,特别是对于 EspressoTests,由于事务内部的读取和写入,我有时会遇到锁定/并发问题。
我也尝试过
var context = InstrumentationRegistry.getInstrumentation().targetContext
dbHelper = DbHelper(context)
作为 DbHelper 的上下文,我在某处读过它,但它无论如何都会更改数据库。我现在被困在这里,期待获得一些如何处理这个问题的提示。
谢谢!