簡體   English   中英

Swift:XCTest委托/協議回調(單元測試)

[英]Swift: XCTest delegate/protocol call backs (Unit test)

我需要為委托/協議回調創建一些單元測試。 以下是我要測試的實現示例:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM