Làm thế nào để kiểm tra một chức năng trong Swift 2.0 có ném hay không? Làm thế nào để khẳng định rằng chính xác ErrorType
được ném?Làm thế nào để đơn vị kiểm tra chức năng ném trong Swift?
Trả lời
Dưới đây là t ông Swift 3
phiên bản của Fyodor Volchyok's answer người sử dụng XCTAssertThrowsError
:
enum MyError: Error {
case someExpectedError
case someUnexpectedError
}
func functionThatThrows() throws {
throw MyError.someExpectedError
}
XCTAssertThrowsError(try functionThatThrows()) { error in
XCTAssertEqual(error as? MyError, MyError.someExpectedError)
}
Ngoài ra, nếu Error
enum bạn đã liên kết các giá trị, lưu ý bạn sẽ phải sử dụng câu lệnh if case
(hoặc làm enum của bạn phù hợp với Equatable
nhưng đó sẽ là mã thêm không cần thiết để viết):
enum MyError: Error {
case someExpectedError
case someUnexpectedError
case associatedValueError(value: Int)
}
func functionThatThrows() throws {
throw MyError.associatedValueError(10)
}
XCTAssertThrowsError(try functionThatThrows()) { error in
guard case MyError.associatedValueError(let value) = error else {
return XCTFail()
}
XCTAssertEqual(value, 10)
}
Với các chức năng sau đây và tuyên bố:
enum SomeError: ErrorType {
case FifthError
case FirstError
}
func throwingFunction(x: Int) throws {
switch x {
case 1:
throw SomeError.FirstError
case 5:
throw SomeError.FifthError
default:
return
}
}
Chức năng này sẽ ném một FifthError
nếu 5 được trao cho các chức năng và FirstError
nếu 1 được đưa ra.
Để kiểm tra, đó là một chức năng chạy thành công các đơn vị kiểm tra có thể xem xét như sau:
func testNotError() {
guard let _ = try? throwingFunction(2) else {
XCTFail("Error thrown")
return
}
}
Các let _
cũng có thể được thay thế bằng bất kỳ tên nào khác, vì vậy bạn có thể tiếp tục kiểm tra đầu ra.
Để khẳng định rằng một chức năng ném, không có vấn đề gì ErrorType
các đơn vị kiểm tra có thể trông như thế này:
func testError() {
if let _ = try? throwingFunction(5) {
XCTFail("No error thrown")
return
}
}
Nếu bạn muốn kiểm tra cho một cụ thể ErrorType
nó được thực hiện với một -statement do-catch
. Đây không phải là cách tốt nhất so với các ngôn ngữ khác.
Bạn phải chắc chắn rằng bạn ...
return
trongcatch
cho đúngErrorType
XCTFail()
vàreturn
cho tất cả kháccatch
XCTFail()
nếu khôngcatch
được thực hiện
Với yêu cầu này, thử nghiệm ca se có thể trông giống như sau:
func testFifthError() {
do {
try throwingFunction(5)
} catch SomeError.FifthError {
return
} catch {
XCTFail("Wrong error thrown")
return
}
XCTFail("No error thrown")
}
Ít nhất là Xcode 7.3 (có thể sớm hơn), bạn có thể sử dụng built-in XCTAssertThrowsError()
:
XCTAssertThrowsError(try methodThatThrows())
Nếu không có gì được ném trong quá trình thử bạn sẽ thấy một cái gì đó như thế này:
Nếu bạn muốn kiểm tra nếu ném lỗi là của một số loại bê tông, bạn có thể sử dụng errorHandler
tham số của XCTAssertThrowsError()
:
enum Error: ErrorType {
case SomeExpectedError
case SomeUnexpectedError
}
func functionThatThrows() throws {
throw Error.SomeExpectedError
}
XCTAssertThrowsError(try functionThatThrows(), "some message") { (error) in
XCTAssertEqual(error as? Error, Error.SomeExpectedError)
}
- 1. Làm thế nào để kiểm tra chức năng tiện ích 'riêng tư' đơn vị trong nodejs
- 2. Làm thế nào để đơn vị chức năng kiểm tra gọi localtime() trong Perl?
- 3. làm thế nào để đơn vị kiểm tra chức năng nội bộ trong plugin jquery?
- 4. Kiểm tra đơn vị hoặc Kiểm tra chức năng?
- 5. Làm thế nào để kiểm tra đơn vị chức năng trang trí?
- 6. Làm thế nào để kiểm tra net.Conn trong các bài kiểm tra đơn vị trong Golang?
- 7. Làm thế nào để bạn kiểm tra đơn vị?
- 8. Riêng tư chức năng và kiểm tra đơn vị Haskell
- 9. Kiểm tra đơn vị Chức năng Azure và tệp .csx
- 10. Chức năng kiểm tra đơn vị có tác dụng phụ?
- 11. Làm thế nào để đơn vị kiểm tra NSFetchedResultsController trong Swift
- 12. Python: Làm cách nào để đơn vị kiểm tra chức năng lồng nhau?
- 13. Làm cách nào để kiểm tra đơn vị chức năng Perl in trên màn hình?
- 14. Làm thế nào để kiểm tra đơn vị OData Client?
- 15. Kiểm tra đơn vị - Làm thế nào để tiếp tục?
- 16. Hadoop: Làm thế nào để kiểm tra đơn vị FileSystem
- 17. Làm thế nào để kiểm tra đơn vị IDisposable?
- 18. kiểm tra đơn vị python cách làm thế nào để
- 19. Làm thế nào để kiểm tra phương pháp ném lỗi trong Swift 2?
- 20. Chức năng Generic Swift để kiểm tra đối tượng loại
- 21. JS Chức năng đơn vị đơn vị
- 22. Làm thế nào để bạn tổ chức các bài kiểm tra đơn vị thành các gói?
- 23. Kiểm tra xem chức năng có sẵn trong Swift không?
- 24. Làm thế nào để viết bài kiểm tra đơn vị cho các chức năng dựa trên dữ liệu động?
- 25. Làm thế nào để thử nghiệm một sản lượng chức năng của (stdout/stderr) tại Gò đơn vị kiểm tra
- 26. Kiểm thử đơn vị và kiểm tra chức năng trong CodeIgniter
- 27. Kotlin: Thực hiện chức năng bên trong để kiểm tra đơn vị
- 28. Làm thế nào để kiểm tra đơn vị Maven khác nhau từ tích hợp Kiểm tra?
- 29. Làm thế nào để viết bài kiểm tra đơn vị kiểm tra bất biến đồng thời
- 30. Làm thế nào để thử DateTime.Now trong các bài kiểm tra đơn vị?
Tôi tin rằng sẽ có ý nghĩa hơn khi sử dụng phương pháp XCTAssertThrowsError như Fyodor Volchyok đã đề xuất. –