使用 Realm 进行 Swift XCTest UI 测试
Posted
技术标签:
【中文标题】使用 Realm 进行 Swift XCTest UI 测试【英文标题】:Swift XCTest UI tests with Realm 【发布时间】:2017-04-06 14:49:16 【问题描述】:我正在使用 Realm 2.4.2 使用 Swift 3.0 开发我的 UI 测试。
UI 测试目标
使用 pk "cat_01" 创建领域对象 Cat 检查是否存在带有 pk "cat_01" 的 Cat 对象 -> 成功 打开包含从领域获取的猫列表的视图控制器 -> 空列表应用
CatsListViewController:带有猫的表格视图(未找到 Cat 对象)我怎样才能“看到”测试目标和应用程序相同的领域对象?
我不想做的是使用launchArguments
变通方法委派应用程序来创建对象。
【问题讨论】:
【参考方案1】:您无法在 UITest 目标和应用程序中“看到”相同的 Realm 对象,因为这两个是作为完全独立的进程运行的。
来自苹果的docs:
UI 测试以与用户相同的方式测试您应用的 UI 无法访问您应用的内部方法、函数和 变量。 ...您的测试代码作为一个单独的进程运行,综合 应用中的 UI 响应的事件。
换句话说:您的 UITests 在与您的主应用程序交互的单独应用程序中运行(当您运行 UITest 时,您可以看到 Testrunner 应用程序在您的主应用程序启动之前启动和关闭)。这两个应用程序不能共享对象。
我看到了你可以走的两个方向:
1.通过应用的 UI 创建猫对象
您可能有一个“添加猫”按钮。在你的 UITest 中按下它,像使用一样添加一只猫,然后断言这只猫已被添加到列表中。这就是 UITests 的用途。像用户一样使用应用并测试用户与应用交互的结果。
2。使用单元测试:
如果您想测试创建的 Realm cat 对象是否正在填充列表,那么 UnitTest 可能是更好的方法。在单元测试期间,您可以完全访问您的应用程序代码。因此,您可以在测试代码中创建一个 cat 对象,应用程序将“看到”它。
【讨论】:
以上是关于使用 Realm 进行 Swift XCTest UI 测试的主要内容,如果未能解决你的问题,请参考以下文章
Realm Swift 使用部分更新 collectionView
iOS:使用 XCTest 对 UIViewController 组件进行单元测试