0

我目前正在使用 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 的上下文,我在某处读过它,但它无论如何都会更改数据库。我现在被困在这里,期待获得一些如何处理这个问题的提示。

谢谢!

4

0 回答 0