如何测试在Swift 2中引发错误的方法? [英] How to test method that throws error in Swift 2?
本文介绍了如何测试在Swift 2中引发错误的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的方法定义:
func isValidForMode(mode: DBFindViewControllerMode) throws -> Bool { }
现在我可以用简单的方式测试,因为我知道它 DO NOT 抛出错误:
Now I can test this in simple way, since I know that it DO NOT throws an error:
XCTAssertTrue(try! searchOptionsManager.isValidForMode(.Address))
但是如果我知道该方法抛出了什么?
But what if I know that method throws?
最好的解决方案将是 XCTAssertThrows()
,但不是: - )
The best solution would be XCTAssertThrows()
, but it is not:-)
以下是我的尝试:
do {
try searchOptionsManager.isValidForMode(.Address)
} catch let error {
XCTAssertEqual(error as! DBErrorType, DBErrorType.CannotBeEmpty("Street"))
}
但是失败,因为:
找不到
XCTAssertEqual
接受参数列表的重载的类型(DBErrorType,DBErrorType)
Cannot find an overload for
XCTAssertEqual
that accepts an argument list of type(DBErrorType, DBErrorType)
推荐答案
使您的 DBError
符合 Equatab le
:
enum DBError: ErrorType, Equatable {
case CannotBeEmpty(message: String)
}
func ==(lhs: DBError, rhs: DBError) -> Bool {
switch (lhs, rhs) {
case (.CannotBeEmpty(let leftMessage), .CannotBeEmpty(let rightMessage)):
return leftMessage == rightMessage
}
}
然后,您可以在 XCTAssertEqual
And then you can use it in XCTAssertEqual
:
func testExample() {
do {
try isValid()
}
catch let e as DBError {
XCTAssertEqual(e, DBError.CannotBeEmpty(message: "Street"))
}
catch {
XCTFail("Wrong error")
}
}
Or create your own XCTAssertThrows
.
enum DBError: ErrorType, Equatable {
case CannotBeEmpty(message: String)
}
func ==(lhs: DBError, rhs: DBError) -> Bool {
switch (lhs, rhs) {
case (.CannotBeEmpty(let leftMessage), .CannotBeEmpty(let rightMessage)):
return leftMessage == rightMessage
}
}
And:
func XCTAssertThrows<T: ErrorType where T: Equatable>(error: T, block: () throws -> ()) {
do {
try block()
}
catch let e as T {
XCTAssertEqual(e, error)
}
catch {
XCTFail("Wrong error")
}
}
class TestsTests: XCTestCase {
func testExample() {
XCTAssertThrows(DBError.CannotBeEmpty(message: "Street")) { try isValid() }
}
}
这篇关于如何测试在Swift 2中引发错误的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文