Unit Test - XCTest Assertions trong IOS
XCTest là thư viện kiểm thử (Unit testing framework) của Apple để lập trình viên kiểm thử lại ứng dụng của mình. Trong XCTest Framework hỗ trợ rất nhiều hàm khác nhau để hỗ trợ cho việc test, thường có dạng XCTAssertXxx() . Các hàm này so sánh (check) giá trị mong đợi với giá trị đầu ra trong test ...
XCTest là thư viện kiểm thử (Unit testing framework) của Apple để lập trình viên kiểm thử lại ứng dụng của mình. Trong XCTest Framework hỗ trợ rất nhiều hàm khác nhau để hỗ trợ cho việc test, thường có dạng XCTAssertXxx(). Các hàm này so sánh (check) giá trị mong đợi với giá trị đầu ra trong test method. Nếu giá trị đầu ra match với giá trị mong đợi, test sẽ pass; ngược lại, test sẽ fail và raise 1 message lỗi.
Các hàm Test được kiệt kê theo thể loại như sau:
1. Boolean Assertions
Dùng để check 1 test condition là true hoặc false. Gồm các hàm sau:
Assertion | Description |
---|---|
XCTAssert(expression, message) | nếu expression là true thì test pass, ngược lại sẽ raise message. |
XCTAssertTrue(expression, message) | nếu expression là true thì test pass, ngược lại sẽ raise message. |
XCTAssertFalse(expression, message) | nếu expression là false thì test pass, ngược lại sẽ raise message. |
Ví dụ:
func checkEnable(str: String) -> Bool { return str.count > 2 }
func testAssertTrue() { let validStr = "test" let enable = viewModel.checkEnable(str: validStr) XCTAssert(enable, "enable is false") XCTAssertTrue(enable, "enable is false") }
func testAssertFalse() { let inValidStr = "" let enable = viewModel.checkEnable(str: inValidStr) XCTAssertFalse(enable, "enable is true") }
2. Nil và Non-nil Assertions
Dùng để check 1 test condition là nil hoặc non-nil. Gồm các hàm sau:
Assertion | Description |
---|---|
XCTAssertNil (expression, message) | nếu expression là nil thì test pass, nếu expression not nil thì sẽ raise mesage. |
XCTAssertNotNil(expression, message) | nếu expression là not nill thì test pass, nếu expression là nil thì sẽ raise message. |
Ví dụ:
func testAssertNil() { XCTAssertNil(nil, "Should be not nil") }
func testAssertNotNil() { XCTAssertNotNil(LoginViewModel(), "Should be nil") }
3. Equality và Inequality Assertions
Dùng để check 2 giá trị bằng nhau hoặc không bằng nhau. Gồm các hàm sau:
Assertion | Description |
---|---|
XCTAssertEqual(expression1, expression2, message) | nếu expression1 bằng expression2 thì test pass, ngược lại sẽ raise message. |
XCTAssertNotEqual(expression1, expression2, message) | nếu expression1 không bằng expression2 thì test pass, ngược lại sẽ raise message. |
Ví dụ:
func testAssertEqual() { let a = 1 let b = 1 XCTAssertEqual(a, b, "a == b is wrong") }
func testAssertNotEqual() { let a = 1 let b = 2 XCTAssertNotEqual(a, b, "a != b is wrong") }
4. Comparable value Assertions
Dùng để so sánh 2 giá trị để xác định 1 giá trị lớn hơn hoặc nhỏ hơn giá trị kia. Gồm các hàm sau:
Assertion | Description |
---|---|
XCTAssertGreaterThan(expression1, expression2, message) | nếu expression1 lớn hơn expression2 thì test pass, ngược lại sẽ raise message. |
XCTAssertGreaterThanOrEqual(expression1, expression2, message) | nếu expression1 lớn hơn hoặc bằng expression2 thì test pass, ngược lại sẽ raise message. |
XCTAssertLessThanOrEqual(expression1, expression2, message) | nếu expression1 nhỏ hơn hoặc bằng expression2 thì test pass, ngược lại sẽ raise message. |
XCTAssertLessThan(expression1, expression2, message) | nếu expression1 nhỏ hơn expression2 thì test pass, ngược lại sẽ raise message. |
Ví dụ:
func testComparableAssert() { XCTAssertGreaterThan(2, 1, "2 <= 1 is wrong") XCTAssertGreaterThanOrEqual(2, 1, "2 < 1 is wrong") XCTAssertLessThanOrEqual(1, 2, "1 > 2 is wrong") XCTAssertLessThan(1, 2, "1 >= 2 is wrong") }
5. NSException Assertions
Kiểm tra xem hàm có ném 1 exception (hoặc không) không. Gồm các hàm sau:
Assertion | Description |
---|---|
XCTAssertThrowsError(expression, message, errorHandler: (Error) -> Void) | nếu expression ném 1 ngoại lệ (exception) thì test pass, ngược lại test fail. Nếu muốn check xem lỗi được ném thì sử dụng tham số errorHandler |
XCTAssertNoThrow(expression, message) | nếu expression không ném 1 ngoại lên thì test pass, nếu ném 1 ngoại lệ thị test fail và raise message. |
Ví dụ:
enum ErrorType: Error { case someExpectedError case someUnexpectedError } func functionThatThrows() throws { throw ErrorType.someExpectedError } func testExceptionAssert() { XCTAssertThrowsError(try functionThatThrows(), "Not thow exception") { (error) in XCTAssertEqual(error as? ErrorType, ErrorType.someExpectedError) } }
6. Failing Unconditionally
Tạo ra một failure ngay lập tức và vô điều kiện. Ví dụ:
XCTFail("abc")