OK. I looked around, and didn\'t find an exact answer to my issue.
I am trying to test a timeout handler in a unit test (not the main run).
The issue seems t
When you use timers and the main runloop, you will need to manually run the runloop:
while (continueCondition || !time_way_over_timeout) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
where continueCondition
could be some flag that indicates that the timeout handler was invoked and time_way_over_timeout
a comparision of the current time with a pre-calulated maximum execution time (so you can handle a "timeout of timout test" for your unit test ^^)
Also see this blog post about asynchronous unit testing: http://dadabeatnik.wordpress.com/2013/09/12/xcode-and-asynchronous-unit-testing/
Looks something like this in Swift 3.0 with XCTest.
// somebody has to call the .fulfill() method on this variable
// to the expectation will fail after 25 seconds
var asyncExpectation : XCTestExpectation!
func testExample() {
asyncExpectation = expectation(description: "longRunningFunction")
self.waitForExpectations(timeout: 25.0) { (error) in
if let error = error {
print("Error \(error)")
}
}
// more stuff here
}