熊屋 | 技術小記

iOS, Web Development Notes

XCTest Assertions 及其種類

| Comments

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 的參數,當 expression1expression2 的差別 大於 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...)

expression1expression2 的差別 小於及等於 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 傳入的物件是 nil 時產生錯誤。

Boolean Tests

XCTAssertTrue

1
XCTAssertTrue(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 名稱時產生錯誤。對像 AppKitFoundation 這類會丟特定 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 名稱時產生錯誤。對像 AppKitFoundation 這類會丟特定 exception name 的 frameworks 還滿有用的,如 NSInvalidArgumentException 等。

本篇文章撰寫時基於 2014-6-12 最後更新的 Pre-Release Documentation 版本,如果發現相關內容有更新,請在下方留言,謝謝。

Comments