断言代码在单元测试中的某个时刻被执行?

时间:2019-04-23 17:13:32

标签: swift unit-testing signals

我有这个单元测试:

func testState() {
    searchController.filter.query = "Missouri"
    searchController.resultsSignal.subscribePast(with: self) { sections in

        if sections.count < 1 { return }
        // Want to test that code at least gets to here at some point
        ...
    }
}

并且我想确保至少在某个时候超过if sections.count < 1 { return }行。

由于触发信号时它会运行,所以我不在乎是否在某个时候触发了另一个信号,但是我确实要确保在某些时候触发sections.count> 0测试。

有没有办法做到这一点?我在考虑使用布尔值并将其初始化为false,然后在sections.count大于1的情况下将其设置为true,并断言该值是true,但这除非通过我做一番延迟就不起作用。正在使用信号。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用XCTestExpectation并在.fulfill之后调用sections.count,以通知测试异步测试已成功。

func testState() {
    let expectation = XCTestExpectation(description: "Should execute")
    searchController.filter.query = "Missouri"
    searchController.resultsSignal.subscribePast(with: self) { sections in

        if sections.count < 1 { return }
        // Want to test that code at least gets to here at some point
        expectation.fulfill()
        ...
    }
    wait(for: [expectation], timeout: 10) // Will fail if .fulfill does not get called within ten seconds
}