Swift:XCTest 委托/协议回调(单元测试)



我需要为委托/协议回调创建一些单元测试。这是我尝试测试的实现示例:

protocol SomethingWithNumbersDelegate: class {
func somethingWithDelegate(results:Int)
}
class SomethingWithNumbers {
var delegate: SomethingWithNumbersDelegate? = nil
func doAsyncStuffWithNumbers(number:Int)  {
var numbers = Int()
/*
doing some with the input
*/
self.delegate?.somethingWithDelegate(results: numbers)
}
}

我还没有找到创建单元测试 (XCTest) 来测试委托响应。

我真的很感激你的帮助。

您可以使用XCTestExpectation工具。例如:

class NumbersTest: XCTestCase, SomethingWithNumbersDelegate {
func testAsynchronousNumbers() {
numbersExpectation = expectation(description: "Numbers")
let numbers = SomethingWithNumbers()
numbers.delegate = self
numbers.doAsyncStuffWithNumbers(number: 123)
// Waits 100 seconds for results.
// Timeout is always treated as a test failure.
waitForExpectations(timeout: 100)
XCTAssertEqual(self.results, 456)
}
private var numbersExpectation: XCTestExpectation!
private var results: Int!
func somethingWithDelegate(results: Int) {
self.results = results
numbersExpectation.fulfill()
}
}

随着 Xcode 6 的期望值的引入,异步测试变得更加容易。期望是由XCTestCase上的辅助方法创建的,例如:

func expectation(description: String) -> XCTestExpectation

创建并返回与测试用例关联的期望。


更新。对于那些运行 Xcode 9 的人来说,这现在是等待给定XCTestExpectation实例的首选习惯用语(即,而不是旧的waitForExpectations方法):

wait(for: [numbersExpectation], timeout: 100)

最新更新