我编写了一个基本的Utilities类,它有一个方法将json转换为数据。
static func data(from json: [String : AnyObject]) throws -> Data {
do {
return try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
} catch let error {
throw error
}
}
之后我为这种方法写了一些测试。
func testJsonToDataSuccess() {
let mockJson: [String : Any] = ["hello" : "there"]
do {
let data = try Utils.data(from: mockJson as [String : AnyObject])
XCTAssertNotNil(data)
} catch let error {
XCTFail(error.localizedDescription)
}
}
func testJsonToDataFail() {
let someString = String(
bytes: [0xD8, 0x00] as [UInt8],
encoding: String.Encoding.utf16BigEndian)!
let mockJson = ["hello" : someString]
do {
let data = try Utils.data(from: mockJson as [String : AnyObject])
XCTAssertNil(data)
} catch let error {
XCTAssertNotNil(error)
}
}
我认为我已经测试了这个Utilities类的成功和失败案例。但是,此课程的测试覆盖率为:%85。 我想知道为什么测试覆盖率不是%100? 任何帮助将不胜感激......
答案 0 :(得分:0)
Pheew,你给了我一个关于这个的艰难时期,但我想在Xcode中了解代码覆盖率是值得的。一旦我运行了你的代码(由于你没有包含你曾经使用过什么项目设置的说明,也没有完成你的文件,因此它不是那么容易)我终于让它作为一个MacOs应用程序运行。
正如您所说,Utils
类(或data
函数)的覆盖范围最终不会完整。如果你看看那些没有被覆盖的线条,那么这些线条将是最后一个具有闭合括号的线条(至少那是它最终在我的情况下)。这似乎是Xcode的一些相当恼人的行为,但如果你查看this question这似乎是一个长期存在的问题,据我所知还没有解决。
奇怪的是,一旦你按照以下方式重写你的功能,这将会消失:
static func data(from json: [String : AnyObject]) throws -> Data {
let data: Data
do {
data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
} catch let error {
throw error
}
return data
}
最终的大括号不会受到这种行为的影响。
但是我授予你迄今为止我不得不忍受的最难的Swift代码的标题。