快速测试调用功能的计时器

时间:2018-10-22 09:09:13

标签: ios swift unit-testing timer nstimer

方法someFunc()在方括号后调用。我需要在sleep方法之后(恰好在时间过去之后)调用它。看来testTimer()超出括号(无法通过测试)之后,计时器会调用执行块。

var value: String?

func testTimer() {
    let timer2 = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { timer in
            self.someFunc()
        }

    sleep(2)
    XCTAssertNotNil(value)
}

func someFunc() {
    value = "someValue"
}

之所以需要这样做是因为我正在使用高阶函数,并且需要具有外部函数(在应用程序中会定期调用)。

1 个答案:

答案 0 :(得分:2)

您可能想使用wait(for:timeout:)方法。

在测试用例中保留XCTestExpectation的实例:

let expectation = XCTestExpectation(description: "value not nil")

在您的someFunc中,实现期望值:

expectation.fulfill()

在测试方法中,您可以这样做:

let timer2 = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { timer in
        self.someFunc()
    }

wait(for: [expectation], timeout: 2)