【问题标题】:Android app testing - How to test DAO layer with real database?Android 应用测试 - 如何使用真实数据库测试 DAO 层?
【发布时间】:2016-07-25 11:17:36
【问题描述】:

我正在尝试为我们的应用程序编写单元测试,但我对测试我们的 DAO 层有点困惑。该层使用了很多真正的SQLiteDatabase 的方法,我们认为在这种情况下使用Mockito 不是正确的方法。 所以,我们的问题是——如何用真实的数据库测试 DAO 层?在 Android 中,在单元测试中获取真实的数据库实例是真的吗?

我们要测试的内容:

  1. SQL 语句的执行,例如database.execSQL(..) 方法。
  2. 执行insertupdatedeleterawQuerySQLiteDatabase 类的方法。

提前致谢!

【问题讨论】:

    标签: android sqlite unit-testing testing


    【解决方案1】:

    抱歉,您不能使用真实数据库编写单元测试。根据定义,这些不是单元测试。

    但是,有时提供 Fake 实现可能很有价值,例如在您的情况下是 InMemoryDatabase。 这有助于将您的代码与 DB 解耦,因为您必须定义一个抽象接口和一些从 realDB 切换到 fakeDB 的方法。 如果您只使用少量 DB 方法,那么在您的单元测试中付出努力并超过 Mock 解决方案可能是值得的。

    但是,从长远来看,更好的方法是改进您的设计。请阅读“依赖倒置原则”和“洋葱架构”。

    【讨论】:

    • 这是另一种“圣战”问题。我同意你的观点,不要用真正的数据库编写单元测试。然而在网络上有很多与此争论的文章。对于 OP,我建议编写集成测试。
    • @EvgeniyK.,感谢有关集成测试的短语。我想,我们会写的。
    猜你喜欢
    • 2019-11-15
    • 2011-01-30
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多