Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios XCTestCase异步_Ios_Xctest_Xctestcase - Fatal编程技术网

Ios XCTestCase异步

Ios XCTestCase异步,ios,xctest,xctestcase,Ios,Xctest,Xctestcase,我有一个场景中的测试用例 在XCTestCase主体中,有一组测试用例。 我只希望所有测试用例在第一个测试用例在我的特殊目的中成功完成后开始,第一个测试用例响应是其他测试用例使用的令牌 我不想将参数令牌添加到其他测试用例中 基本上,测试文件是这样的 class MyTestCase: XCTestCase { var token: String! override func setUp() { super.setUp() self.contin

我有一个场景中的测试用例

在XCTestCase主体中,有一组测试用例。 我只希望所有测试用例在第一个测试用例在我的特殊目的中成功完成后开始,第一个测试用例响应是其他测试用例使用的令牌

我不想将参数令牌添加到其他测试用例中

基本上,测试文件是这样的

class MyTestCase: XCTestCase {

    var token: String!

    override func setUp() {
        super.setUp()
        self.continueAfterFailure = false
    }

    func testGetToken() {
        asyncGetToken { token in
            self.token = token
            // From now, the test1 and test2 should be started.
        }
    }
    func test1() {
        //using token to make request etc
    }

    func test2() {
        //using token to make request etc
    }
}

有人建议使用简单的解决方案吗?

如评论中所述,您应该将令牌检索移到设置方法中,这将允许在每次测试之前检索令牌,并使您的测试彼此独立

override func setUp() {
    super.setUp()
    self.continueAfterFailure = false

    let tokenExpectation = expectation(description: "get token")
    asyncGetToken { token in
        self.token = token
        tokenExpectation.fulfill()
    }
    let result = XCTWaiter().wait(for: [tokenExpectation], timeout: 5)
    XCTAssertEqual(result, .completed)
}

最好是测试彼此完全独立。这意味着一个测试的行为不应该依赖于另一个测试的结果,并且测试应该能够以任何顺序运行。如果所有测试都依赖于相同的初始状态,testGetToken所做的唯一一件事就是设置该状态,那么您可以在测试用例的设置中,在完成之前等待异步结果设置。请注意asyncGetToken是异步的,安装程序很可能在检索和分配令牌之前完成。在这种情况下,XCTWaiter可用于延迟完成设置编辑,以包括在主线程上观察到的异步作业所需的WaiteExpection,否则我们将出现死锁。实际上,我已经这样做了,但我也希望它作为独立的测试,而不是嵌入到设置函数中。无论如何,谢谢你的帮助@Oletha