我遇到了Xcode中代码覆盖率报告的问题。从这个截图中可以看到:
在左侧选项卡上,第58行从断点处“触摸”,在右侧选项卡上,测试通过。在右侧选项卡上,我只在第37行运行测试。
为什么Xcode用红色标记第58行,因为没有覆盖?
第53行没有“触摸”(如果我在那里设置了一个断点)。使用SQLite作为数据库。
整个项目可用here。
编辑:添加代码:
Test.swift
func testAddFuelFail() {
fuelsManager.dropTable()
XCTAssertEqual(addFuel(), -1)
}
FuelsManager.swift
func addFuel(dateOfFuel: Date, mileageOnSave: Int, quantityOfFuel: Double, pricePerUnitOfFuel: Double) -> Int64 {
let insertFuel = fuelsTable.insert(date <- dateOfFuel, mileage <- mileageOnSave, quantity <- quantityOfFuel, pricePerUnit <- pricePerUnitOfFuel)
do {
let id = try database!.run(insertFuel)
return id
} catch {
print(error)
}
return -1
}
实际上它报告了here的一个错误。
- 在同一二进制文件上,XC 10上的多次运行之间的覆盖率不同。就像在第一次运行中一样,它在另一次运行中显示x%vs,它将显示y%保持相同的代码。
- 覆盖率/测试次数在11.4模拟器和12.0模拟器上运行时有所不同,两者都在XC 10上运行
- 测试数量也有点不同,比如在某些运行中它是5507测试,而在某些运行中它是5506。
XC 10肯定带来了很多错误。
取出断点并运行测试。测试完成后,覆盖率信息应该会发生变化。