gpt4 book ai didi

swift - 您能否仅在另一个 XCTest 完成后才运行 XCTest(如果是这样,是否可以以先前的测试通过为条件)?

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:42 27 4
gpt4 key购买 nike

例如,在使用 icloud 数据填充本地数据的测试成功之前,我不想运行从我的本地数据中选择的函数的测试。

我认为一个合适的单元测试应该在测试本地数据选择方法之前编写一些预定义的本地数据(人们同意吗?)。然而,对 iCloud 的调用是异步的,因此可能会在另一个测试中途返回,因此它仍然需要延迟到它们完成。

最佳答案

单元测试应该是原子的和独立的,所以通常不推荐这种方法。 XCTest 默认也不支持这个。这个Stackoverflow post里面有讨论关于重写 Objective-C 中的 +testInvocations 以按您希望的顺序返回 NSInvocation 对象。

这里有几个选项需要考虑。一种是在 setUp 中执行初始测试配置。将在所有测试用例运行之前执行一次的全局设置可以进入类级别的 setUp 方法。如果您想在每个测试运行之前执行设置,那么您可以创建一个实例级 setUp 方法。 (还有匹配的 tearDown 方法在测试运行后执行)。 XCTest 文档有更多详细信息 here .请注意,您需要使用此 Stackoverflow post 中描述的信号量模式以确保所有异步调用在运行测试之前完成。

我认为处理此问题的最直接方法是使用 expectationWithDescription 类将 iCloud 调用包含在同一单元测试中。简而言之,您将执行以下四个步骤:

  1. 实例化一个新的期望,它会在异步逻辑完成时发出信号。
  2. 执行您的异步操作(即从 iCloud 填充数据)。在此操作的回调中,您可以包含更多逻辑和断言。
  3. 在回调的方法结束时(通常),您可以fulfill() 期望。这将表明期望已达到。
  4. 在异步 block 之后,调用 waitForExpectationsWithTimeout() 方法。您将在超时期限内调用此方法;如果在此期间没有达到预期,则可以通过测试失败,日志输出等。

涵盖异步调用的 Stackoverflow 帖子中还提供了期望代码示例。

关于swift - 您能否仅在另一个 XCTest 完成后才运行 XCTest(如果是这样,是否可以以先前的测试通过为条件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40763239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com