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

标签 android sqlite unit-testing testing

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

我们要测试的内容:

  1. 执行 SQL 语句,例如 database.execSQL(..) 方法。
  2. 执行 SQLiteDatabaseinsert, update, delete, rawQuery 方法类。

提前致谢!

最佳答案

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

但是,有时提供假实现可能很有值(value),例如在你的例子中是一个 InMemoryDatabase。 这有助于将您的代码与 DB 稍微分离,因为您将必须定义一个抽象接口(interface)和一些从 realDB 切换到 fakeDB 的方法。 如果您仅使用少量 DB 方法,那么在您的单元测试中可能值得付出努力并超过 Mock 解决方案。

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

关于Android 应用程序测试 - 如何使用真实数据库测试 DAO 层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38566346/

相关文章:

java - 评论是否从最终 apk 中删除?

java - 地理围栏 : GoogleApiClient is not connected yet

ruby-on-rails - Rails 按父 belongs_to 关联中的字段排序

python-2.7 - 使用 python unittest 的多个测试文件的一个摘要

python - 如何在 pytest 中为模拟函数提供不同的返回值?

android - GoogleApiClient : not firing onConnected or onConnectionFailed

Android - 如何使用 ActionBarCompat 显示子菜单

ios - 如何在 iPhone 应用程序中获取数据时在 sqlite 查询中传递变量

c++ - 提高SQLite每秒更新的性能?

android - ShadowAlertDialog.getLatestAlertDialog() 为 android.support.v7.app.AlertDialog 返回 null