为什么? Class 显示在单元测试覆盖率中,即使未添加到测试目标中
Why? Class showing in Unit test coverage Even though not added in test targets
我有一些 UIView class 正在覆盖范围内。我没有在单元测试目标下添加它们。既不在单元测试中也不在 UI 单元测试中。但仍然显示那些文件。
我不知道它们是否包含在测试范围内。
问:如何将它们从单元测试覆盖范围中移除?
问:它们是否涉及单元测试覆盖率分数?
Class 包含在单元测试覆盖率中:
Class未添加到测试目标中:
我认为您的问题与收集所有目标的代码覆盖率有关。
- 创建新目标 - 您可以复制现有目标。
- 将主机应用程序更改为全新的目标。
- 将您的测试方案设置更改为新目标作为代码覆盖源。请看截图:
- 记得添加到你的测试文件中
@testable import UnitTestExampleCodeCoverage
添加到您想要的新目标文件中。
在我的示例项目中,我有:AppDelegate
、ViewController
、ViewController2
、ViewController3
、ViewController4
、View
、View2
、View3
、View4
。我添加到新目标:AppDelegate
、ViewController3
、ViewController4
、View3
、View4
所以只有这五个 类 应该是计算代码的基础报道。
为您的 类 添加测试。
代码覆盖率报告仅包含 类 添加到新目标 。请记住,旧目标可以是您的主要目标 - 新目标只是实现您目标的一种抽象层:"remove some classes from code coverage report".
这是整个项目:https://github.com/mStaruchowicz/SO55723759
测试愉快 ;)
当您在项目中激活覆盖时,目标中的所有文件都将计算覆盖。
我推荐你使用XCOV:
https://github.com/nakiostudio/xcov
您可以 运行 覆盖并放置您忽略的文件以提高正确覆盖率。
嗨 @Sandy,回答你的问题:
How we can remove them from unit test coverage?
从 Xcode 10.2 开始,无法从测试覆盖率报告中排除文件。
Are they involve in unit test coverage score?
是的。所有文件占总覆盖率%。
如果您想计算不考虑某些文件的测试覆盖率分数,最好的机会是编写脚本来解析 xccov
输出。
我找不到任何关于如何与之交互的官方文档,但 this post 是一个很好的起点。
如果您想要可自定义的 UT 覆盖率报告,您可以在其中忽略您想要的文件,Slather 可能是最好的工具。
您可以通过在 ignore
选项下配置 .slather.yml
文件中的文件来忽略覆盖率计算中的文件。
请查找详细信息here如何忽略。
单元测试时运行,
- 您的应用已启动
- 测试被注入并且运行
问题是应用程序启动会启动您的正常序列,创建视图并可能启动一些网络调用。这不仅会干扰代码覆盖率报告——它可能会毒害您的单元测试。例如,如果您通过让单元测试触发通知来测试通知,您需要知道侦听该通知的唯一对象是由测试创建的,而不是在应用程序启动时出现的。
另一个忽略某些文件覆盖率的问题是:您将如何查看这些文件的单元测试覆盖率?
解决方案是使用几乎不执行任何操作的不同应用委托进行测试。
我有一些 UIView class 正在覆盖范围内。我没有在单元测试目标下添加它们。既不在单元测试中也不在 UI 单元测试中。但仍然显示那些文件。
我不知道它们是否包含在测试范围内。
问:如何将它们从单元测试覆盖范围中移除? 问:它们是否涉及单元测试覆盖率分数?
Class 包含在单元测试覆盖率中:
Class未添加到测试目标中:
我认为您的问题与收集所有目标的代码覆盖率有关。
- 创建新目标 - 您可以复制现有目标。
- 将主机应用程序更改为全新的目标。
- 将您的测试方案设置更改为新目标作为代码覆盖源。请看截图:
- 记得添加到你的测试文件中
@testable import UnitTestExampleCodeCoverage
添加到您想要的新目标文件中。 在我的示例项目中,我有:
AppDelegate
、ViewController
、ViewController2
、ViewController3
、ViewController4
、View
、View2
、View3
、View4
。我添加到新目标:AppDelegate
、ViewController3
、ViewController4
、View3
、View4
所以只有这五个 类 应该是计算代码的基础报道。为您的 类 添加测试。
代码覆盖率报告仅包含 类 添加到新目标 。请记住,旧目标可以是您的主要目标 - 新目标只是实现您目标的一种抽象层:"remove some classes from code coverage report".
这是整个项目:https://github.com/mStaruchowicz/SO55723759
测试愉快 ;)
当您在项目中激活覆盖时,目标中的所有文件都将计算覆盖。
我推荐你使用XCOV: https://github.com/nakiostudio/xcov
您可以 运行 覆盖并放置您忽略的文件以提高正确覆盖率。
嗨 @Sandy,回答你的问题:
How we can remove them from unit test coverage?
从 Xcode 10.2 开始,无法从测试覆盖率报告中排除文件。
Are they involve in unit test coverage score?
是的。所有文件占总覆盖率%。
如果您想计算不考虑某些文件的测试覆盖率分数,最好的机会是编写脚本来解析 xccov
输出。
我找不到任何关于如何与之交互的官方文档,但 this post 是一个很好的起点。
如果您想要可自定义的 UT 覆盖率报告,您可以在其中忽略您想要的文件,Slather 可能是最好的工具。
您可以通过在 ignore
选项下配置 .slather.yml
文件中的文件来忽略覆盖率计算中的文件。
请查找详细信息here如何忽略。
单元测试时运行,
- 您的应用已启动
- 测试被注入并且运行
问题是应用程序启动会启动您的正常序列,创建视图并可能启动一些网络调用。这不仅会干扰代码覆盖率报告——它可能会毒害您的单元测试。例如,如果您通过让单元测试触发通知来测试通知,您需要知道侦听该通知的唯一对象是由测试创建的,而不是在应用程序启动时出现的。
另一个忽略某些文件覆盖率的问题是:您将如何查看这些文件的单元测试覆盖率?
解决方案是使用几乎不执行任何操作的不同应用委托进行测试。