Swift单元测试包含计时器的方法

我是Swift的新手,而Swift是单元测试的新手。在MyClass的代码中,我使用计时器来触发某些方法.. 我需要对具有计时器计数值的方法进行单元测试。 我已经检查了几个答案。没有任何结果。 我做不到。谁能帮我这个忙。 预先感谢。

 class MyClass(){

func triggerSecondTimer() {
    timer = Timer.scheduledTimer(timeInterval: 1.0,target: self,selector: #selector(repeatSecondTimer),userInfo: nil,repeats: true)
}

@objc func repeatSecondTimer(){
    timerCount += 1
    if isServiceCallComplete || timerCount == secondInterval {
        timer?.invalidate()
        finishedSecondTimer()
    }
}
}
   func testSecondTimer() {

    splashScreenmock.triggerSecondTimer()
   // I want to check the timer count here..

    XCTAssertEqual(self.splashScreenmock.timerCount,20)


}
bxkanh 回答:Swift单元测试包含计时器的方法

您应该使用期望。

例如:

func testSecondTimer() {
    let myObj = MyClass()
    let expectation = self.expectation(description: #function)
    let expectedTime: Double = 2

    myObj.triggerSecondTimer()
    DispatchQueue.main.asyncAfter(deadline: .now() + expectedTime) {
        expectation.fulfill()
    }

    waitForExpectations(timeout: expectedTime+1)
    XCTAssertEqual(myObj.timerCount,Int(expectedTime))
}

如果在repeatSecondTimer方法中将timerCount增加一个以上,则此测试失败...

,

您要在这里测试什么?您绝对不应该测试Timer的工作机制。您应该测试的是您的代码正确配置了计时器。

出于测试目的,您可以假设Timer有效。

所以...

测试timer.timeInterval正确,测试timer.target正确,测试timer.selector正确,并测试需要确保正确设置的所有其他属性。

您不需要实际运行计时器并等待一秒钟,然后检查是否运行了正确的功能。那将测试Timer的内部运作方式。

本文链接:https://www.f2er.com/2927586.html

大家都在问