为什么?在单元测试覆盖范围内显示的类即使未在测试目标中添加

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

我有一些UIView类即使在覆盖范围内。我没有在单元测试目标下添加它们。无论是单元测试还是UI单元测试。但仍然显示那些文件。

我不知道它们是否包含在测试范围内。

问:我们如何将它们从单元测试覆盖中删除?问:他们是否涉及单元测试覆盖率?

单元测试范围包括的类:

enter image description here

未在测试目标中添加的类:

enter image description here

ios swift unit-testing xctest test-coverage
5个回答
1
投票

您好@Sandy,回答您的问题:

我们如何将它们从单元测试覆盖中删除?

从Xcode 10.2开始,无法从测试覆盖率报告中排除文件。

它们是否涉及单元测试覆盖率?

对,他们是。所有文件都占总覆盖率%。

如果要计算不考虑某些文件的测试覆盖率分数,最好的机会是编写一个脚本来解析xccov输出。

我找不到任何关于如何与它互动的官方文档,但this post是一个很好的起点。


1
投票

当您在项目中激活覆盖范围时,目标中的所有文件都将计算覆盖范围。

我建议您使用XCOV:https://github.com/nakiostudio/xcov

您可以运行coverage并将忽略的文件放在正确的范围内。


1
投票

我认为您的问题与收集所有目标的代码覆盖率有关。

  1. 创建新目标 - 您可以复制现有目标。

enter image description here

  1. 将主机应用程序更改为全新目标。

enter image description here

  1. 将测试方案设置更改为新目标作为代码覆盖源。请看一下截图:

Manage Schemes

Edit

Choose Gather coverage for...

enter image description here

enter image description here

  1. 请记住添加到您的测试文件@testable import UnitTestExampleCodeCoverage
  2. 添加到您想要的新目标文件。在我的例子proj我有:AppDelegateViewControllerViewController2ViewController3ViewController4ViewView2View3View4。我添加到新目标:AppDelegateViewController3ViewController4View3View4所以只有这五个类应该是计算代码覆盖率的基础。
  3. 在您的课程中添加测试。
  4. 代码覆盖率报告仅包含添加到新目标的类。请记住,旧目标可以是您的主要目标 - 新目标只是实现目标的一种抽象层:“从代码覆盖率报告中删除一些类”。

enter image description here

这是整个项目:https://github.com/mStaruchowicz/SO55723759

快乐测试;)


0
投票

如果您想要可自定义的UT覆盖率报告,您可以忽略所需的文件,Slather可能是最好的工具。

您可以通过在.slather.yml选项下的ignore文件中配置文件来忽略覆盖率计算中的文件。

请查看详细信息here如何忽略。


0
投票

当单元测试运行时,

  • 您的应用已启动
  • 测试被注入并运行

问题是应用程序启动会启动您的正常序列,创建视图并可能启动一些网络调用。这不仅会干扰代码覆盖率报告 - 它可能会使您的单元测试中毒。例如,如果您通过单元测试触发通知来测试通知,则需要知道侦听该通知的唯一对象是由测试创建的,而不是来自应用程序启动。

忽略某些文件覆盖范围的另一个问题是:您将如何查看这些文件的单元测试覆盖率?

解决方案是使用不同的app委托进行测试,几乎不做什么。有关详细信息,请参阅How to Switch Your iOS App Delegate for Improved Testing

© www.soinside.com 2019 - 2024. All rights reserved.