gpt4 book ai didi

ios - 如何知道 XCTestExpectation 当前履行计数

转载 作者:行者123 更新时间:2023-12-04 13:55:40 26 4
gpt4 key购买 nike

在异步测试中,至少对我来说,必须知道期望的实现计数才能知道如何断言是很常见的。
例如,一个测试来检查这个场景:

  • 获取数据
  • 收到第一个回调后,断言项目是否符合预期
  • 获取下一页项目
  • 断言项目是否符合预期

  •     func testOne() {
    let expectData = expectation(description: "data")
    expectData.expectedFulfillmentCount = 2
    var expectDataFulfillmentCount = 0

    sut.data = {
    expectData.fulfill()
    expectDataFulfillmentCount += 1

    if expectDataFulfillmentCount == 1 {
    XCTAssertEqual(sut.numberOfItems, 3)
    sut.fetchNextPage()
    } else if expectDataFulfillmentCount == 2 {
    XCTAssertEqual(sut.numberOfItems, 6)
    }
    }

    sut.fetch()

    waitForExpectations(timeout: 0.1, handler: nil)
    }
    我对这种模式不满意。我知道我可以在有期望时稍微改变我的断言方式,这样:
        func testTwo() {
    let expectFirstData = expectation(description: "firstData")
    let expectSecondData = expectation(description: "secondData")

    sut.data = {
    if sut.numberOfItems == 3 {
    expectFirstData.fulfill()
    sut.fetchNextPage()
    } else if sut.numberOfItems == 6 {
    expectSecondData.fulfill()
    }
    }

    sut.fetch()

    wait(for: [expectFirstData, expectSecondData], timeout: 0.1, enforceOrder: true)
    }
    但是我也不喜欢这个,因为我没有断言(没有 XCTAssert ),我只是在满足期望,然后失去了轻松确定测试失败的原因和位置的能力。但是,这种模式非常适合对 bool 值的期望,例如:
        func testThree() {
    let truePerformingOperationExpect = expectation(description: "truePerformingOperationExpect")
    let falsePerformingOperationExpect = expectation(description: "falsePerformingOperationExpect")

    sut.performingOperation = { fetching in
    if fetching {
    truePerformingOperationExpect.fulfill()
    } else {
    falsePerformingOperationExpect.fulfill()
    }
    }

    sut.fetch()

    wait(for: [truePerformingOperationExpect, falsePerformingOperationExpect], timeout: 0.1, enforceOrder: true)
    }
    对我来说,如果我能得到期望的当前实现计数,这可以很容易地解决,它会清理测试很多,我会拥有两个最好的世界。是否可以?有没有其他方法可以做到这一点?

    最佳答案

    我最终继承了 XCTestExpectation :

    class CountedFulfillmentTestExpectation: XCTestExpectation {
    private(set) var currentFulfillmentCount: Int = 0

    override func fulfill() {
    currentFulfillmentCount += 1
    super.fulfill()
    }
    }

    关于ios - 如何知道 XCTestExpectation 当前履行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63030545/

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