我正在尝试为我们的应用程序编写单元测试,但我对测试我们的 DAO 层有点困惑。该层使用了很多真正的 SQLiteDatabase
方法,我们认为在这种情况下使用 Mockito
不是正确的方法。
所以,我们的问题是——如何用真实数据库测试 DAO 层?在单元测试中获取数据库的真实实例在 Android 中是真实的吗?
我们要测试的内容:
- 执行 SQL 语句,例如
database.execSQL(..)
方法。 - 执行
SQLiteDatabase
的insert
,update
,delete
,rawQuery
方法类。
提前致谢!
最佳答案
抱歉,您不能用真实数据库编写单元测试。根据定义,这些不是单元测试。
但是,有时提供假实现可能很有值(value),例如在你的例子中是一个 InMemoryDatabase。 这有助于将您的代码与 DB 稍微分离,因为您将必须定义一个抽象接口(interface)和一些从 realDB 切换到 fakeDB 的方法。 如果您仅使用少量 DB 方法,那么在您的单元测试中可能值得付出努力并超过 Mock 解决方案。
但是,从长远来看,更好的方法是改进您的设计。请阅读“依赖倒置原则”和“洋葱架构”。
关于Android 应用程序测试 - 如何使用真实数据库测试 DAO 层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38566346/