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

时间:2019-04-17 09:01:47

标签: ios swift unit-testing xctest test-coverage

我有一些UIView类,尽管该类仍在讨论之列。我还没有在单元测试目标下添加它们。既不是单元测试也不是UI单元测试。但那些文件仍在显示。

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

问:我们如何将它们从单元测试范围中删除? 问:他们是否参与单元测试覆盖率得分?

单元测试涵盖的类别:

enter image description here

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

enter image description here

5 个答案:

答案 0 :(得分: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. 添加到所需的新目标文件。 在我的示例项目中,我有:AppDelegateViewControllerViewController2ViewController3ViewController4ViewView2,{ {1}},View3。我添加了新的目标:View4AppDelegateViewController3ViewController4View3,因此只有这五个类可以作为计算代码覆盖率的基础。

  3. 将测试添加到您的班级。

  4. 代码覆盖率报告仅包含添加到新目标的类。请记住,旧目标可以是您的主要目标-新目标只是实现您目标的一种抽象层:“从代码覆盖率报告中删除一些类”。

enter image description here

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

测试愉快;)

答案 1 :(得分:1)

在项目中激活覆盖率时,目标中的所有文件都会计算覆盖率。

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

您可以运行coverage并放置忽略的文件以改善正确的coverage。

答案 2 :(得分:1)

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

  

我们如何将其从单元测试范围中删除?

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

  

他们是否参与单元测试覆盖率得分?

是的。所有文件占总覆盖率的百分比。

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

我找不到有关如何与之交互的任何正式文档,但是this post是一个很好的起点。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

运行单元测试时,

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

问题在于应用启动会激发您的正常顺序,创建视图并可能启动一些网络调用。这不仅会干扰代码覆盖率报告,还可能会毒害您的单元测试。例如,如果通过让单元测试触发通知来测试通知,则需要知道监听该通知的唯一对象是由测试创建的,而不是在应用程序启动时出现的。

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

解决方案是使用其他应用程序委托进行几乎不执行任何操作的测试。有关详细信息,请参见How to Switch Your iOS App Delegate for Improved Testing