带有预加载 sqlite3 数据库的 iOS 单元测试

Posted

技术标签:

【中文标题】带有预加载 sqlite3 数据库的 iOS 单元测试【英文标题】:iOS UnitTests with preloaded sqlite3 DB 【发布时间】:2017-03-03 04:46:55 【问题描述】:

我需要创建 ios 单元测试,我需要将 sql .db 推送到应用程序位置/沙盒/任何内容(可能来自测试套件的 setUp() 函数)并从测试用例运行一些 CRUD 操作,然后删除测试完成时来自 tearDown() 的 db。如何将 .db 推送到应用程序位置进行测试,它将像应用程序内部使用的数据库一样使用。

另一个问题,我需要运行自动化测试,那么是否有任何命令(例如在 android 中我们使用 adb,在 Tize 我们使用 gdb)让 iOS 应用程序将这些数据库文件插入应用程序位置以运行这些测试用例。如果我遗漏任何一点,请帮忙。

在 iOS 的模拟数据库中测试 CRUD 操作的标准方法是什么。

【问题讨论】:

【参考方案1】:

就我的研究而言,没有适用于 iOS 的类似 adb/sdb 的工具。此外,还有一种在真实数据库上执行测试的解决方法。

步骤

    将测试数据库保存在 App/resource 文件夹中。您可以通过关注these technique 从您的发布版本中跳过这个大型测试数据库。 在App端创建一个函数replaceWithTestDatabase(),基本上用App/resource/test-database替换你的App数据库。如果需要,您可以临时复制当前的 App db。 如果您想从 AppTests(单元测试)访问,您只需调用 Aapp/replaceWithTestDatabase,因为 iOS 测试托管在主 App 下。 如果您想从 AppUITests 访问,您需要从 setUp() 方法发送额外的启动参数,以让 App 知道它应该从应用委托调用 replaceWithTestDatabase。 Here 很好地解释了我们如何从 AppUITests 向主 App 发送参数。

希望对你有帮助。

【讨论】:

以上是关于带有预加载 sqlite3 数据库的 iOS 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中预加载数据库

iOS:如何在显示前预加载数据

Objective C iOS 预加载视图

iOS - 从发布版本中排除测试文件

UITableView 重新加载 - Xcode 5

使用默认值预加载核心数据表