Ios XCTest与核心数据 XCTests是否并行运行(也就是说,是否允许多个测试同时运行?)。考虑一个具有多个测试的测试文件,以及多个具有多个测试的测试文件。 如果核心数据用于某些正在测试的组件,并且测试可以并行运行,那么在测试中使用核心数据的正确方法是什么?例如,测试应该从一个“干净”的数据存储开始,然后根据需要添加对象,然后根据存储的内容进行测试。听起来,如果它们都使用相同的托管对象上下文/存储,那么它们将指向相同的数据,因此存在相互冲突的风险

Ios XCTest与核心数据 XCTests是否并行运行(也就是说,是否允许多个测试同时运行?)。考虑一个具有多个测试的测试文件,以及多个具有多个测试的测试文件。 如果核心数据用于某些正在测试的组件,并且测试可以并行运行,那么在测试中使用核心数据的正确方法是什么?例如,测试应该从一个“干净”的数据存储开始,然后根据需要添加对象,然后根据存储的内容进行测试。听起来,如果它们都使用相同的托管对象上下文/存储,那么它们将指向相同的数据,因此存在相互冲突的风险,ios,unit-testing,core-data,xctest,Ios,Unit Testing,Core Data,Xctest,每个XCTest方法按顺序运行(一次一个) 为了测试我经常在内存持久性存储中创建的核心数据,这里有一个很好的例子:使用这种MOC,您总是可以获得清晰的核心数据状态 请检查一下这个 每个XCTest方法按顺序运行(一次一个) 为了测试我经常在内存持久性存储中创建的核心数据,这里有一个很好的例子:使用这种MOC,您总是可以获得清晰的核心数据状态 还请检查此项。测试用例和测试文件将逐个执行 2.应通过在测试用例(@testable import product_name)文件中导入应用程序来创建核心数

每个XCTest方法按顺序运行(一次一个)

  • 为了测试我经常在内存持久性存储中创建的核心数据,这里有一个很好的例子:使用这种MOC,您总是可以获得清晰的核心数据状态

  • 请检查一下这个

  • 每个XCTest方法按顺序运行(一次一个)

  • 为了测试我经常在内存持久性存储中创建的核心数据,这里有一个很好的例子:使用这种MOC,您总是可以获得清晰的核心数据状态


  • 还请检查此项。测试用例和测试文件将逐个执行

    2.应通过在测试用例(@testable import product_name)文件中导入应用程序来创建核心数据管理对象上下文,并访问测试用例文件中的核心日期对象。所有测试用例将独立运行。
    正如您所提到的,测试应该从“干净”的数据存储开始,然后根据需要添加对象,然后根据存储的内容进行测试。是的,这是正确的方法。请确保在测试文件中创建了核心数据管理对象。可以在测试导航部分测试测试用例。

    1。测试用例和测试文件将逐个执行

    2.应通过在测试用例(@testable import product_name)文件中导入应用程序来创建核心数据管理对象上下文,并访问测试用例文件中的核心日期对象。所有测试用例将独立运行。
    正如您所提到的,测试应该从“干净”的数据存储开始,然后根据需要添加对象,然后根据存储的内容进行测试。是的,这是正确的方法。确保在测试文件中创建了核心数据管理对象。可以在测试导航部分测试测试用例。

    测试在测试运行程序进程的主线程上连续运行。但是,没有任何东西可以自动防止您启动异步操作,这些操作可能会扩展到未来测试用例的执行中

    例如,
    NSManagedObjectContext
    上对
    perfumblock
    的调用不能保证在下一个测试开始之前执行。如果您的测试触发了以异步方式传播到父托管对象上下文的保存,那么这可能会特别有问题


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

    测试在测试运行程序进程的主线程上连续运行。但是,没有任何东西可以自动防止您启动异步操作,这些操作可能会扩展到未来测试用例的执行中

    例如,
    NSManagedObjectContext
    上对
    perfumblock
    的调用不能保证在下一个测试开始之前执行。如果您的测试触发了以异步方式传播到父托管对象上下文的保存,那么这可能会特别有问题


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

    “例如,在NSManagedObjectContext上调用perfumblock不能保证在下一个测试开始之前执行。”如果你在考试中有期望呢?在完成测试之前,测试不会一直等到预期完成吗?如果您使用的是
    xctestexpection
    或等效的异步断言,那么可能会这样做。例如,您可以编写一个测试拆卸方法,该方法在继续下一个测试之前等待异步事件完成。您确定此类异步操作完成的确切方式取决于您的应用程序,这可能很棘手。我发现,如果可能的话,首先避免共享状态通常更安全。“例如,在NSManagedObjectContext上调用perfumblock不能保证在下一个测试开始之前执行。”如果您在测试中有期望,该怎么办?在完成测试之前,测试不会一直等到预期完成吗?如果您使用的是
    xctestexpection
    或等效的异步断言,那么可能会这样做。例如,您可以编写一个测试拆卸方法,该方法在继续下一个测试之前等待异步事件完成。您确定此类异步操作完成的确切方式取决于您的应用程序,这可能很棘手。我发现如果可能的话,首先避免共享状态通常更安全。