xcode 将捕获错误视为测试失败
Posted
技术标签:
【中文标题】xcode 将捕获错误视为测试失败【英文标题】:xcode treating catching an error as a test failure 【发布时间】:2016-01-11 16:45:15 【问题描述】:我写了以下函数:
func sendMessage(message:Dictionary<String,AnyObject>)
do
let json = try NSJSONSerialization.dataWithJSONObject(message, options: [])
let jsonStr = NSString(data: json, encoding: NSUTF8StringEncoding)
self.wsSource.writeString(jsonStr as! String)
catch let err as NSError
Rc2LogError ("error sending json message on websocket:\(err)")
这是一个应该通过的单元测试:
func testSendMessageFailure()
let dict = ["foo":wspace!, "bar":22]
session!.sendMessage(dict)
XCTAssertNil(wsSrc.lastStringWritten)
但测试失败并显示以下消息:
test failure: -[Rc2SessionTests testSendMessageFailure()] failed: failed: caught "NSInvalidArgumentException", "Invalid type in JSON write (Rc2.Rc2Workspace)"
这不是失败。这是我所期望的!这是否意味着不可能编写一个调用具有处理错误的错误处理程序的函数的单元测试?
我如何告诉 XCTest/Xcode 捕获的错误/异常并不意味着测试失败?
【问题讨论】:
【参考方案1】:do-catch
语句仅用于捕获函数抛出的错误。它们不会捕获异常。异常用于表明存在编程错误。
如果 obj 不会生成有效的 JSON,则会引发异常。此异常在解析之前抛出,表示编程错误,而不是内部错误。您应该在使用
isValidJSONObject:
调用此方法之前检查输入是否会生成有效的JSON。
来源:NSJSONSerialization
发生的事情是message
不是一个可以用 json 表示的对象。我的猜测是wspace
包含无法转换为 json 的类型。
【讨论】:
是的,它故意包含一个不可序列化的对象。我不熟悉 isValidJSONObject:,我可以调用它来获得我想要的功能。以上是关于xcode 将捕获错误视为测试失败的主要内容,如果未能解决你的问题,请参考以下文章
Karma/Jasmine 测试失败并出现错误:'未捕获的错误:尚未为上下文加载模块名称“simple_test.js”:_。使用要求([])'
Youtube API未捕获(在承诺中)错误:请求失败,状态码为403