如何从 Swift 中每个 UI 测试断言的空核心数据开始?

Posted

技术标签:

【中文标题】如何从 Swift 中每个 UI 测试断言的空核心数据开始?【英文标题】:How to start with empty Core Data for every UI Test Assertion in Swift? 【发布时间】:2015-08-03 23:29:58 【问题描述】:

我有一个使用核心数据的应用程序。应用程序的行为会有所不同,具体取决于该数据是否已被填充。

我曾希望,在每个测试用例之前,都会清空核心数据,让每个测试用例在新的应用实例上运行。测试用例不应该依赖于某些测试设备的状态,尤其是因为其他测试用例操纵了这种状态。不幸的是,默认情况下,核心数据不仅存在于测试用例之间,而且存在于完全独立的测试运行之间。我正在尝试解决此问题。

我的第一个想法是在拆解函数中转储所有核心数据。这样,每个测试都会自行清理。不幸的是,我无法使用此命令获取 NSManagedObjectContext:

let context = (UIApplication.sharedApplication().delegate as! MyApp.AppDelegate).managedObjectContext!

因为它有这个编译器错误:

  Undefined symbols for architecture x86_64: "type metadata accessor for MyApp.AppDelegate", referenced from: MyAppUITests.MyAppUITests.tearDown

为了修复此错误,我尝试将 UITests 添加到 AppDelegate 目标成员资格并执行@testable import MyApp。都没有奏效。我需要 managedObjectContext 来清空核心数据。

现在我认为必须有一种更好的内置方法来在每个测试用例运行的开始或结束时转储所有核心数据。它最好在最后,因为每个测试都应该在自己之后清理。有人知道这是怎么做到的吗?

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用XCUIApplication().launchEnvironment = ["key":"val"]轻松做到这一点

并检查您是否 AppDelegate 并解析 NSProcessInfo。

我正在努力从应用程序获取信息以进行测试/发送指令,而不仅仅是在启动期间。

【讨论】:

以上是关于如何从 Swift 中每个 UI 测试断言的空核心数据开始?的主要内容,如果未能解决你的问题,请参考以下文章

swift 在Swift中测试前置条件(或断言)

如何从 Xcode UI 测试访问核心数据存储?

从嵌套结构 swift ui 创建列表

Swift XCUITest:如何在执行 UI 测试时单击 UIImagePickerController() 的默认“选择”按钮?

软件测试 |属性获取与断言

如何在 Swift 中编写 UI 测试,以测试点击按钮时标签是不是可见?