XCTest 与核心数据

XCTest with Core Data

  1. 并行执行 XCTests 运行(也就是说,是否允许同时 运行 进行多项测试?)。考虑具有多个测试的单个测试文件,以及每个具有多个测试的多个测试文件。
  2. 如果被测试的部分组件使用了核心数据,并且测试可以运行并行,那么在测试中使用核心数据的正确方法是什么?例如,测试应该从 'clean' 数据存储开始,然后根据需要添加对象,然后根据存储的内容进行测试。听起来如果它们都使用相同的托管对象 context/store 它们将指向相同的数据,因此存在相互冲突的风险。
  1. 每个 XCTest 方法是 运行 顺序(目前一个)

  2. 为了测试核心数据,我经常在内存持久存储中创建,这里你有很好的片段:code使用这种MOC你总是有清晰的核心数据状态

请同时检查此 Rays tutorial

1.Test个案例一个个执行,测试文件也执行

2.Your 核心数据管理对象上下文应该通过在你的测试用例(@testable import product_name)文件中导入你的应用程序来创建,并访问测试用例中的核心日期对象files.All 测试用例将 运行 独立。 所以正如你提到的,测试应该从 'clean' 数据存储开始,然后根据需要添加对象,然后根据 store.yes 的内容进行测试,这是正确的 way.make 当然核心数据管理对象在测试中创建 files.test 案例可以在测试导航部分进行测试。

测试 运行 在测试 运行ner 进程的主线程上连续进行。然而,没有什么可以自动防止您启动可能扩展到未来测试用例执行的异步操作。

例如,在 NSManagedObjectContext 上调用 perfomBlock 不能保证在下一个测试开始之前执行。如果您的测试触发异步传播到父托管对象上下文的保存,这可能尤其成问题。

我发现编写易于测试的代码很有价值,这意味着将托管对象上下文或其他依赖项注入被测代码。这应该允许您为每个测试用例构建一个独立的核心数据堆栈,而不是意外地在单个上下文中共享一些全局状态。那么你只需要提防过于宽容的通知观察者,它们不会费心去检查 NSNotification 的发送者(即观察 NSManagedObjectContextDidSaveNotifications 时)。