【问题标题】:Swift XCTest UI tests with Realm使用 Realm 进行 Swift XCTest UI 测试
【发布时间】: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 变通方法委派应用程序来创建对象。
【问题讨论】:
标签:
swift
testing
realm
xctest
xcode-ui-testing
【解决方案1】:
您无法在 UITest 目标和应用程序中“看到”相同的 Realm 对象,因为这两个是作为完全独立的进程运行的。
来自苹果的docs:
UI 测试以与用户相同的方式测试您应用的 UI
无法访问您应用的内部方法、函数和
变量。 ...您的测试代码作为一个单独的进程运行,综合
应用中的 UI 响应的事件。
换句话说:您的 UITests 在与您的主应用程序交互的单独应用程序中运行(当您运行 UITest 时,您可以看到 Testrunner 应用程序在您的主应用程序启动之前启动和关闭)。这两个应用程序不能共享对象。
我看到了你可以走的两个方向:
1.通过应用的 UI 创建猫对象
您可能有一个“添加猫”按钮。在你的 UITest 中按下它,像使用一样添加一只猫,然后断言这只猫已被添加到列表中。这就是 UITests 的用途。像用户一样使用应用并测试用户与应用交互的结果。
2。使用单元测试:
如果您想测试创建的 Realm cat 对象是否正在填充列表,那么 UnitTest 可能是更好的方法。在单元测试期间,您可以完全访问您的应用程序代码。因此,您可以在测试代码中创建一个 cat 对象,应用程序将“看到”它。