防止AndroidTests修改数据库

问题描述

我目前正在使用 sqliteDatabase 编写应用程序。 现在我不确定特别用于测试的上下文。 我创建了一个 MyApplication 类,它派生表单 Application 并作为 DbHelper 的上下文我使用了如果我手动测试我的应用程序可以正常工作的实例。

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        instance = this
    }

    companion object {
        lateinit var instance: MyApplication
            private set
    }
}

我有一些instrumentedTests(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 的上下文,我在某处读到了它,但它无论如何都会更改数据库。 我现在卡在这里,期待得到一些如何处理这个问题的提示

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)