我有一个Swift函数,Xcode显示代码覆盖率为0。该行是一个右括号(下面用红色突出显示)。这是Xcode中的一个bug吗?如果不是,我需要满足什么条件才能运行那一行?我以为我已经覆盖了这个方法的所有路径。
envsm3lx1#
很肯定这是Xcode代码覆盖率的一个bug(特性?)。问题归结为return语句不允许它下降到空的else语句,从而表明代码没有执行。return语句会对它们正在做的计算代码行数的工作施加影响。在try/catch块的示例中,您实际上没有太多的选择来防止空执行。作为一个实验,删除return语句,并找到一个更好的方法来捕获writeToURL语句,这样它就不会在error/catch语句中执行,这可能会为该行给予干净的代码覆盖率。
wnvonmuf2#
Xcode报告包括结束括号的测量,这通常不是所希望的。在配置中没有什么可以做的来修复这个问题(据我所知)。(FD我在Codecov工作)你可以使用Codecov,一个托管的解决方案,它会自动删除这些多余的行。在https://github.com/codecov/example-xcode了解更多信息。谢谢:)
aoyhnmkz3#
如果你仍然遇到这个问题,试着在-fprofile-arcs和-ftest-coverage之外添加编译选项-fno-elide-constructors和-fno-default-inline,因为它也可以帮助覆盖“丢失”的构造函数和内联函数。这修复了我在使用GNU/GCC 11.3时遇到的类似问题。
-fprofile-arcs
-ftest-coverage
-fno-elide-constructors
-fno-default-inline
3条答案
按热度按时间envsm3lx1#
很肯定这是Xcode代码覆盖率的一个bug(特性?)。问题归结为return语句不允许它下降到空的else语句,从而表明代码没有执行。return语句会对它们正在做的计算代码行数的工作施加影响。
在try/catch块的示例中,您实际上没有太多的选择来防止空执行。
作为一个实验,删除return语句,并找到一个更好的方法来捕获writeToURL语句,这样它就不会在error/catch语句中执行,这可能会为该行给予干净的代码覆盖率。
wnvonmuf2#
Xcode报告包括结束括号的测量,这通常不是所希望的。在配置中没有什么可以做的来修复这个问题(据我所知)。
(FD我在Codecov工作)你可以使用Codecov,一个托管的解决方案,它会自动删除这些多余的行。在https://github.com/codecov/example-xcode了解更多信息。谢谢:)
aoyhnmkz3#
如果你仍然遇到这个问题,试着在
-fprofile-arcs
和-ftest-coverage
之外添加编译选项-fno-elide-constructors
和-fno-default-inline
,因为它也可以帮助覆盖“丢失”的构造函数和内联函数。这修复了我在使用GNU/GCC 11.3时遇到的类似问题。