有时,我必须编写测试来验证某些值最终会发生变化。例如,如果我需要处理非结构化并发,就会发生这种情况。以下是 XCTest 中此类测试的一个示例:
let predicate = NSPredicate { service, _ in
guard let service = service as? SomeService else {
return false
}
return service.something == expectedValue
}
let expectation = XCTNSPredicateExpectation(predicate: predicate, object: service)
sut.doSomething(expectedValue)
wait(for: [expectation], timeout: 1.0)
如何在测试中编写这样的测试?
根据代码结构,您可能能够使用Confirmation。不过,在简单情况下,我的做法是:
严格来说,最后一句在逻辑上是不必要的,但为了风格和清晰度,我喜欢通过直接表达积极的期望来强调这一点。
这个举动在我自己的测试代码中非常常见,因此我将其体现在一个宏中,因此我实际上可以这样写: