使用 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

如何在 Swift/XCTest 中写入本地文件?

iOS:使用 XCTest 对 UIViewController 组件进行单元测试

在Swift中使用Realm进行过滤,给我一个对象数组,但是当打印一个属性时,它会给我一个空字符串

在 Swift 应用程序中安装 Realm

Realm Swift 2.0:“不允许操作”- 仅在设备上