當我們還沒有為完整的 XCTest 框架做好準備時,我正在嘗試將一個非常簡單的 unitTest-Like 函式放在一起來教授 Swift。
我把這段代碼放在一起:
enum TestFailure : Error {
case testEqFailure(_ msg: String)
}
func testEq<E:Equatable>(_ actual: E, _ expected: E ) throws {
if actual == expected { return }
print("Test failed")
print("Actual Result : \(actual)")
print("Expected Result: \(expected)")
throw TestFailure.testEqFailure("Test Values were not equal")
}
try testEq(1,1)
try testEq(7,8)
它“作業”得很好(如輸出所示):
Test failed
Actual Result : 7
Expected Result: 8
Swift/ErrorType.swift:200: Fatal error: Error raised at top level: vPlay.TestFailure.testEqFailure("Test Values were not equal")
2021-11-01 10:36:52.050106-0400 vPlay[49261:2400984] Swift/ErrorType.swift:200: Fatal error: Error raised at top level: vPlay.TestFailure.testEqFailure("Test Values were not equal")
但是當我運行它時,Xcode 突出顯示了錯誤的源代碼行:

我錯過了什么?(順便說一句,這是在命令列程式的頂級代碼中使用的,以保持簡單并專注于實際編碼)
uj5u.com熱心網友回復:
嘗試使用 do catch 呼叫該函式
try testEq(1,1)
do {
try testEq(7,8)
} catch {
print(error)
}
我在操場上遇到的錯誤是“一個錯誤被拋出但沒有被捕獲:”但不是指向第一個函式呼叫,而是第二個函式呼叫。
當您的代碼塊包含可能引發錯誤的方法時,您需要使用 do catch 陳述句呼叫該函式。當 throwing 方法失敗并引發錯誤時,執行將進入 catch 塊并根據您在 catch 塊中指示的內容進行處理。
第一個函式呼叫沒有失敗,因為它不會拋出錯誤,但如果它適用于您使用的任何 IDE,那么也嘗試在該呼叫上執行捕獲。
uj5u.com熱心網友回復:
如果你想教一個帶有拋出函式的 sudo 斷言測驗,那么你還必須教錯誤處理,否則 swift 在必須處理被拋出的錯誤時會失敗。如果您想為初學者簡化此操作但仍能理解要點,則可以消除拋出和列舉錯誤。
func testEq<E:Equatable>(_ actual: E, _ expected: E ) {
if actual == expected { return }
print("Test failed")
print("Actual Result : \(actual)")
print("Expected Result: \(expected)")
}
testEq(1,1)
testEq(7,8)
這將列印您想要看到的內容、實際的和預期的內容,同時列印測驗失敗以模擬失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/345359.html
