【问题标题】:Android Sqlite database testing strategyAndroid Sqlite 数据库测试策略
【发布时间】:2016-02-11 18:24:18
【问题描述】:

我是一般测试的新手,并试图找出一种可接受的策略来测试我在 Android 上使用的 Sqlite 数据库。

我正在为我应该如何做到这一点以及不同方法的优点而苦苦挣扎。

如果没有太多经验,运行集成测试似乎是一种好方法。 AFAIK 这意味着启动一个模拟器进行测试,然后运行实际在模拟器上创建和修改数据库的测试。这种方法听起来很有吸引力,因为我可以进行“往返”测试,从一些预先构建的数据对象开始,并可以使用它们和一个真实的数据库来测试所有的 CRUD 操作。这将允许我实际验证如果我插入一个对象然后将其读回,则进入的 POJO 与出来的​​ POJO 相同。我还可以验证对象集合的排序、确认确实发生了删除、数据库升级等事情......

我可以设想的另一种测试方法是使用单元测试而不是集成测试。我可以设想这些测试涉及验证 ContentValues 对象是否正确创建或确保给定某个 Cursor 对象以正确创建 POJO。

对我来说,集成测试方法似乎更胜一筹,因为它可以提供良好的测试覆盖率,我编写的 CRUD 代码是正确的,这样我就不会遇到我期望一个对象的字段的情况被填充但它是空的,或者类似的东西。

其他人如何在 Android 上测试他们的 Sqlite 代码?

在 Android 上的 Sqlite 方面,谁能帮助我了解单元测试与集成测试的优点?

【问题讨论】:

    标签: android sqlite unit-testing integration-testing android-testing


    【解决方案1】:

    由于 SQLite 是在 Android 中实现的,本地单元测试不适用于与其连接的大部分代码。因此,您需要为其运行检测单元测试。但这并不意味着您需要编写真正的集成测试。

    您可以使用 Instrumentation 本身的上下文来创建您正在测试的数据库。为此和一些 JUnit4 方便定义

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    

    在您的 gradle 文件中并使用 InstrumentationRegistry.getContext() 访问上下文。

    这有一个优点,它也适用于库测试,而不是检测任何实际应用程序,或者只是不将文件留在它的上下文中。

    截至Android JUnit4 Testing - Where to get Context from?,您也可以使用

    new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");
    

    并在您自己的应用程序的上下文中测试数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多