这是我的方法定义:
func isValidForMode(mode: DBFindViewControllerMode) throws -> Bool { }
现在我可以用一种简单的方法来测试它,因为我知道它DO NOT会抛出一个错误:
XCTAssertTrue(try! searchOptionsManager.isValidForMode(.Address))
但是如果我知道这个方法会掷回呢?
最好的解决方案将是XCTAssertThrows()
,但它不是:-)
下面是我的尝试:
do {
try searchOptionsManager.isValidForMode(.Address)
} catch let error {
XCTAssertEqual(error as! DBErrorType, DBErrorType.CannotBeEmpty("Street"))
}
但它失败了,因为:
找不到接受(DBErrorType, DBErrorType)
类型的参数列表的XCTAssertEqual
重载
6条答案
按热度按时间mwkjh3gx1#
使您的
DBError
符合Equatable
:然后,您可以在
XCTAssertEqual
中使用它:或者创建您自己的
XCTAssertThrows
。还有:
nkkqxpd92#
或者,只需使用可选的
try
:无需符合
Equatable
kxe2p93d3#
到目前为止,我找到的最佳解决方案是:
通过这种方式,您可以测试是否真的引发了异常,但无法检查引发了什么类型的异常。
nwsw7zdq4#
以下是@robertvojta的回答,针对Xcode 9和Swift 3 - 4进行了一些修改:
用法:
hc8w905p5#
如果您知道函数会抛出错误,那么您还应该确保在未抛出错误的情况下失败。
我在这里修改了来自@robertvojta和@vadim-bulavin的回答:
用法:
btqmn9zl6#
下面是一个示例,您将了解try-catch检查下面的代码
希望你能理解