如何测试N秒后是否调用方法?

时间:2016-03-16 20:49:48

标签: unit-testing testing xctest ohttpstubs

我正在编写一些测试,当应用程序收到请求时,我需要检查“没有任何反应”,该请求必须完全被忽略。知道请求是否被忽略的方法是检查两个代表在发送请求后什么都不会收到。

我不知道如何测试:

func testIgnore() {

    sut.message() {
        //this doesn't have to be called if test succeed
    }

    sut.appointment() {
        //this doesn't have to be called if test succeed
    }

    stub(isHost("test.com")) { (request: NSURLRequest) -> OHHTTPStubsResponse in
        let data = "specific data".dataUsingEncoding(NSUTF8StringEncoding)
        return OHHTTPStubsResponse(data: data!, statusCode: 200, headers: nil)
    }

}

任何想法?我完全迷失了,因为我无法使用期望,因为如果期望超时是测试失败,那么这个场景将是一个成功的测试......

我需要等待例如3秒,如果没有调用块,那么这是成功的

1 个答案:

答案 0 :(得分:2)

在您希望不会被调用的两种方法中添加XCTFail(),这样如果它们被调用,您的测试将会失败。

然后简单地使用XCTest方法进行异步测试,等待3秒钟,例如:

let exp = self.expectationWithDescription("3 seconds passed")
dispatch_after(…3 seconds…, dispatch_get_main_queue()) {
  exp.fulfill()
}
self.waitForExpectationsWithTimeout(4)

⚠️这是我的iPhone上的伪代码,因此很难在那里编写长代码,我可能在方法名称中做了一些拼写错误。根据需要进行调整。

PS:我不知道这个问题与OHHTTPStubs有什么关系,顺便说一句。您的所有问题都是"如何测试方法是否在N秒后被调用" ...