Swift for循环内部的代码覆盖率不正确

Swift for循环内部的代码覆盖率不正确,swift,xcode,unit-testing,code-coverage,Swift,Xcode,Unit Testing,Code Coverage,各位飞越者你好 我正在处理一个Swift类,其初始值设定项包含一个for循环,该循环根据init的参数运行一定次数。不幸的是,我无法向您显示确切的代码,但它与此类似: init(numberOfTimes: Int) { ... for index in 0..<numberOfTimes { // do some stuff here // shows 0 coverage } ... } init(numberOfTim

各位飞越者你好

我正在处理一个Swift类,其初始值设定项包含一个for循环,该循环根据init的参数运行一定次数。不幸的是,我无法向您显示确切的代码,但它与此类似:

init(numberOfTimes: Int) {
    ...
    for index in 0..<numberOfTimes {
        // do some stuff here
        // shows 0 coverage
    }
    ...
}
init(numberOfTimes:Int){
...

对于0中的索引..我相信这可能就是您所说的错误:

自从升级到Xcode 9.3/Swift 4.1后,我注意到代码覆盖率 我的几个项目的百分比下降了

当我在应用程序中使用条件代码时,该错误似乎会发生 初始化器

固定于:

这种使用指定构造函数进行分析的方案有点脆弱。其中一个具体问题是swift最终试图为不同的标称类型构造函数创建不同的SilProfiler,而我们希望覆盖的存储属性初始值设定项可能不会在指定构造函数中发出

一个更简单的想法是存储从标称类型到SilProfiler的映射, 然后为所有项目创建一个合并的探查器实例 标称类型的构造函数


我认为这是初始化器的一个bug。我在
UIColor
的扩展中的
convency init
中有一个
if
语句,该语句的主体在测试期间明显运行,但仍然显示为0覆盖率。
init(numberOfTimes: Int) {
    ...
    for index in 0..<numberOfTimes {
        doOne(index)
        // this part still shows 0 coverage
    }
    ...
}

private func doOne(_ index: Int) {
    // do same things here
    // shows correct coverage
}