Android 应用测试 - 如何使用真实数据库测试 DAO 层?

Posted

技术标签:

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

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

我们要测试的内容:

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这是另一种“圣战”问题。我同意你的观点,不要用真正的数据库编写单元测试。然而在网络上有很多与此争论的文章。对于 OP,我建议编写集成测试。 @EvgeniyK.,感谢有关集成测试的短语。我想,我们会写的。

以上是关于Android 应用测试 - 如何使用真实数据库测试 DAO 层?的主要内容,如果未能解决你的问题,请参考以下文章

如何在真实设备上运行 Android 应用程序?

Emmagee--APP性能测试工具的基本使用

jmeter,测登录,要不要过滤掉JS,CSS等请求?感觉过滤掉了压出来的数据就不真实?

在没有 USB 的真实设备上测试 android 应用程序

monkey命令

Android Monkey的用法