2016-07-30 91 views
1

我正在開發testing framework for iOS development。我也希望這個測試框架經過充分測試。問題是,我無法弄清楚如何爲測試目標編寫一個測試,該測試聲明我的框架正確地導致失敗的測試。如果我創建一個失敗的測試,我反過來會導致測試失敗(我知道,這很混亂)。如何編寫自定義XCTest斷言的自動化測試?

考慮一個例子。我的框架的一部分包含函數來驗證特定的代碼段沒有任何中斷約束。

MTKAssertNoBrokenConstraints { 
    // UI code that might break some constraints 
} 

我已經手工測試此,以驗證當沒有損壞的限制,斷言通過,但是當有破限制,它正確地標誌着試驗爲不合格。

但我需要一個方法來驗證MTKAssertNoBrokenConstraints馬克測試爲失敗沒有實際標誌着測試這個本身失敗。

我已經研究過創建一個符合XCTestObservation的自定義對象,但到目前爲止我只能以無限遞歸結束。我不確定這是否是正確的路徑,或者解決無限遞歸是否實際上將我帶到了我需要的地方。

+0

回答此問題將幫助我解決[問題#2](https://github.com/metova/MetovaTestKit/issues/2)。我會很感激這裏的答案,解決這個問題的請求,或者兩者兼而有之。 – nhgrif

回答

1

以下測試攔截XCTFail("FOO")的故障,然後對故障執行一些檢查。

class TestTheTests: XCTestCase { 

    var interceptFailure = false 
    var failureCount = 0 
    var failureDescription = "" 
    var failureFilePath = "" 
    var failureLineNumber: UInt = 0 
    var failureExpected = false 

    override func recordFailureWithDescription(description: String, inFile filePath: String, atLine lineNumber: UInt, expected: Bool) { 
     if !interceptFailure { 
      super.recordFailureWithDescription(description, inFile: filePath, atLine: lineNumber, expected: expected) 
     } else { 
      failureCount += 1 
      failureDescription = description 
      failureFilePath = filePath 
      failureLineNumber = lineNumber 
      failureExpected = expected 
     } 
    } 

    func testExample() { 
     interceptFailure = true 
     XCTFail("FOO") 
     interceptFailure = false 

     XCTAssertEqual(failureCount, 1) 
     XCTAssertTrue(failureDescription.hasSuffix("FOO"), "Was \"\(failureDescription)\"") 
    } 

} 
+0

好吧,這給了我很多繼續。我會尋找一個更簡潔的實現方式,而不是簡單地設置一個標誌,但我喜歡這個。 – nhgrif

相關問題