针对没有显式主体的 Swift API 的 Xcode 测试覆盖率

问题描述 投票:0回答:1

我正在寻找一种方法来获得没有显式实现(例如属性、枚举案例、类型名称、协议等)的 Swift API 的测试覆盖率。具体来说,了解它们在执行过程中是否被使用。

看起来 Xcode 14 跳过了 Xcode UI 和从 .xcresult 生成的 .xccov 文件中的覆盖率报告中提到的所有 Swift 构造。

有什么办法可以得到吗?

swift xcode code-coverage
1个回答
0
投票
与许多语言一样,Swift 中的测试覆盖率通常涉及确定在测试运行期间执行哪些代码行。然而,正如您所提到的,某些代码构造通常不会被这些传统指标覆盖(例如,属性、枚举情况、类型名称、协议等)。这些构造可能不会以可以通过传统行或分支覆盖率来衡量的方式直接参与程序执行。

鉴于 Xcode 14 并未在覆盖率报告中涵盖这些 Swift 构造,您可能需要以稍微不同的方式来处理此问题。您可以考虑以下几种方法:

1.定制仪器

开发自定义检测系统以手动跟踪何时使用某些 API 元素。这可能涉及:

  • 日志记录:在整个代码中实现日志记录系统,以手动跟踪各种 API 的使用情况。
  • Reflection:Swift 允许一定程度的反射,您可以使用它来检查和记录各种元素的使用情况。
但是,这可能很乏味且容易出错,因为它需要手动标记您想要跟踪的每个 API 元素。

2.静态分析

静态分析工具分析代码而不执行它。您可以开发或使用现有的静态分析工具来确定代码库中是否使用了某些 API 元素以及在何处使用。

  • Linter 或静态分析器:SwiftLint 等工具或使用 SwiftSyntax 的自定义规则可能有助于分析代码使用情况,而无需运行时指标。
3.动态分析

您可以构建一个动态分析工具来检查正在运行的程序以确定使用了 API 的哪些部分。

  • 运行时自省:使用运行时自省来动态分析 API 使用情况。
4.自定义构建配置

创建自定义构建配置并使用

#if

 指令插入日志记录或其他跟踪代码以进行调试/测试构建。这将使您能够手动跟踪某些 API 元素的使用情况,而不影响生产代码。

5.替代工具

探索可能提供比 Xcode 更高级的代码覆盖率跟踪的第三方工具和库。有些工具可能允许更详细或可定制的覆盖率报告。

6.增强测试

增强您的测试套件以显式测试所有 API 元素,确保至少某些测试覆盖它们。

  • 使用模拟:使用模拟对象和数据可以帮助您创建涵盖特定 API 使用情况的测试。
  • 模糊测试:自动生成尝试覆盖尽可能多的 API 表面积的测试。
© www.soinside.com 2019 - 2024. All rights reserved.