方法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"
}
之所以需要这样做是因为我正在使用高阶函数,并且需要具有外部函数(在应用程序中会定期调用)。
答案 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)