Таймер тестирования, который вызывает функцию в swift - PullRequest
0 голосов
/ 22 октября 2018

Метод 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 голосов
/ 22 октября 2018

Возможно, вы захотите использовать метод 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)
...