gpt4 book ai didi

ios - XCTestExpectation - 调用异步方法两次会导致 API 违规

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:55 26 4
gpt4 key购买 nike

我正在用 swifts 编写单元测试,并测试一个独特的工作流程。

  1. 在 methodA() 中,我使用异步方法错误地加载了一个对象(比如使用不正确的凭据)。也掀起一个期待

        func methodA(withCred credential: NSURLCredential) {
    var objA = ObjectA()
    // Set objA.a, objA.b, objA.c,
    objA.credential = credential //Incorrect credential First time, Correct Credential second time
    objA.delegate = self
    expectation = expectationWithDescription(“Aync”)
    objA.callAsyncMethod() //This fires successDelegate() or failureDelegate()}
  2. 当 FailureDelegate() 被触发时,我重新加载对象,这次是正确的。为此,我需要再次调用 MethodA()(这样我就可以重用那里的所有其他内容)。

    func failureDelegate(error: NSError!) {

    XCTAssertTrue(error.localizedDescription == “Invalid Credentials“)
    //Now that I’ve verified correct error is returned, I need to reload objA
    methodA(withCred:correctCredential)
    }

    func successDelegate(obj : ObjectA) {
    XCTAssert(“Object is loaded”)
    expectation.fulfill()
    }

3.这在方法A中再次启动相同的期望,并导致以下错误:

API violation - creating expectations while already in waiting mode.

我知道这是 swift 不允许的。是否有解决方法或更好的方法来测试这些使用 XCTest 与 Swift 循环的异步方法?

谢谢!

最佳答案

不要在测试中共享 expectation 的实例。您应该在每个测试的主体中声明 expectation(即使用 let),而不是作为 XCTestCase 的属性。如果您真的需要使用委托(delegate)模式(闭包会简单得多,也更传统),您可以将其作为附加参数传递给委托(delegate)方法。

关于ios - XCTestExpectation - 调用异步方法两次会导致 API 违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27364442/

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