XCTest Assertions 及其種類
XCTest Assertions 是來自於 XCTest framework ,雖然在 2013 年 Xcode 5 就出來了,目前還是沒有正式 document ,只有 2014/6/12 出的 pre-release documents 有詳加敘述,不過還是看看他有哪些 assertions 可以用吧!
XCTest Assertions 自訂訊息
XCTest Assertions 中每一個 methods 中最後一個參數都是 format… ,可以自訂錯誤訊息,就可以顯示在預設的錯誤訊息後段,不過也可以省略。如下圖:
Assertions 列表
主要分成以下幾個種類:
- Unconditional Fail: 不管怎樣就是讓你中斷
- Equality Tests: 測試相等性
- Nil Tests: 測試物件是否為 nil
- Boolean Tests: 測試真值
- Exception Tests: 測試例外
Unconditional Fail
XCTFail
1 | XCTFail(format...) |
無條件產生錯誤。
Equality Tests
這些 assertions 提供可以檢查各種等式的 methods
XCTAssertEqualObjects
1 | XCTAssertEqualObjects(expression1, expression2, format...) |
當 expression1
不等於 expression2
或其中一個物件是 nil 的時候產生錯誤。
XCTAssertNotEqualObjects
1 | XCTAssertNotEqualObjects(expression1, expression2, format...) |
當 expression1
等於 expression2
的時候產生錯誤。
XCTAssertEqual
1 | XCTAssertEqual(expression1, expression2, format...) |
當 expression1
不等於 expression2
的時候產生錯誤。用於 C 的 scalar variables 。 Scalar variables 包含 int 、 float 、 double 及 char。
XCTAssertNotEqual
1 | XCTAssertNotEqual(expression1, expression2, format...) |
當 expression1
等於 expression2
的時候產生錯誤。用於 C 的 scalar variables 。
XCTAssertEqualWithAccuracy
1 | XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...) |
這個和下一個 method 多出了一個 accuracy 的參數,當 expression1
和 expression2
的差別 大於 accuracy
的時候產生錯誤。而這類的檢查可以用來確認較為精確的 scalar variable types ,如 float 以及 double 。不過其他的 scalar variable 種類也是可以使用。
範例
這一行的檢查,由於 0.1 和 0.2 的差 0.01 大於 0.01 ,所以這時候會產生錯誤:
1 | XCTAssertEqualWithAccuracy(0.1, 0.2, 0.01); |
XCTAssertNotEqualWithAccuracy
1 | XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...) |
當 expression1
和 expression2
的差別 小於及等於 accuracy
的時候產生錯誤。用法則和上前一個 method 一樣:適合用於檢查精確度比較高的 scalar variable types - float 以及 double 。也適用其他種類的 scalar variables 。
XCTAssertGreaterThan
1 | XCTAssertGreaterThan(expression1, expression2, format...) |
適用 scalar values。當 expression1
不大於 ,即小於或等於, expression2
時產生錯誤。
XCTAssertGreaterThanOrEqual
1 | XCTAssertGreaterThanOrEqual(expression1, expression2, format...) |
適用 scalar values。當 expression1
不大於及不等於 ,即小於, expression2
時產生錯誤。
XCTAssertLessThan
1 | XCTAssertLessThan(expression1, expression2, format...) |
適用 scalar values。當 expression1
不小於 ,即大於或等於, expression2
時產生錯誤。
XCTAssertLessThanOrEqual
1 | XCTAssertLessThanOrEqual(expression1, expression2, format...) |
適用 scalar values。當 expression1
不小於及不等於 ,即大於, expression2
時產生錯誤。
Nil Tests
XCTAssertNil
1 | XCTAssertNil(expression, format...) |
當 expression
傳入的物件不是 nil
時產生錯誤。
XCTAssertNotNil
1 | XCTAssertNotNil(expression, format...) |
當 expression
判定為 false
時產生錯誤。
XCTAssert
1 | XCTAssert(expression, format...) |
當 expression
判定為 false
時產生錯誤。與 XCTAssertTrue
的用法相同。
XCTAssertFalse
1 | XCTAssertFalse(expression, format...) |
當 expression
判定為 true
時產生錯誤。
Exception Tests
XCTAssertThrows
1 | XCTAssertThrows(expression, format...) |
當 expression
沒有丟出 exception 時產生錯誤。
XCTAssertThrowsSpecific
1 | XCTAssertThrowsSpecific(expression, exception_class, format...) |
當 expression
沒有丟出特定 class 的 exception 時產生錯誤。
範例
1 | XCTAssertThrowsSpecific([object methodThatShouldThrow], NSException, @"Should throw a NSException") |
這個範例做的測試是:當 [object methodThatSholdThrow]
丟的 exception 不是 NSException
的話,就會產生錯誤。
XCTAssertThrowsSpecificNamed
1 | XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, format...) |
當 expression
沒有丟出特定 class 以及其中沒有包含特定 exception 名稱時產生錯誤。對像 AppKit
或 Foundation
這類會丟特定 exception name 的 frameworks 還滿有用的,如 NSInvalidArgumentException
等。
範例
1 | XCTAssertThrowsSpecificNamed([object methodThatShouldThrow], NSException, NSInvalidArgumentException, @"Should throw NSInvalidArgumentException"); |
這個範例做的測試是:當 [object methodThatSholdThrow]
丟的 exception 不是 NSException
以及是 NSException
,他的 name
卻不是 NSInvalidArgumentException
的話,就會產生錯誤。
XCTAssertNoThrow
1 | XCTAssertNoThrow(expression, format...) |
當 expression
有丟出 exception 時產生錯誤。
XCTAssertNoThrowSpecific
1 | XCTAssertNoThrowSpecific(expression, exception_class, format...) |
當 expression
有丟出特定 class 的 exception 時產生錯誤。丟出其他 class 的 exception 則不會產生錯誤。
XCTAssertNoThrowSpecificNamed
1 | XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, format...) |
當 expression
有丟出特定 class 以及其中有包含特定 exception 名稱時產生錯誤。對像 AppKit
或 Foundation
這類會丟特定 exception name 的 frameworks 還滿有用的,如 NSInvalidArgumentException
等。
本篇文章撰寫時基於 2014-6-12 最後更新的 Pre-Release Documentation 版本,如果發現相關內容有更新,請在下方留言,謝謝。