为什么?在单元测试覆盖范围内显示的类即使未在测试目标中添加
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么?在单元测试覆盖范围内显示的类即使未在测试目标中添加相关的知识,希望对你有一定的参考价值。
我有一些UIView类即使在覆盖范围内。我没有在单元测试目标下添加它们。无论是单元测试还是UI单元测试。但仍然显示那些文件。
我不知道它们是否包含在测试范围内。
问:我们如何将它们从单元测试覆盖中删除?问:他们是否涉及单元测试覆盖率?
单元测试范围包括的类:
未在测试目标中添加的类:
您好@Sandy,回答您的问题:
我们如何将它们从单元测试覆盖中删除?
从Xcode 10.2开始,无法从测试覆盖率报告中排除文件。
它们是否涉及单元测试覆盖率?
对,他们是。所有文件都占总覆盖率%。
如果要计算不考虑某些文件的测试覆盖率分数,最好的机会是编写一个脚本来解析xccov
输出。
我找不到任何关于如何与它互动的官方文档,但this post是一个很好的起点。
当您在项目中激活覆盖范围时,目标中的所有文件都将计算覆盖范围。
我建议您使用XCOV:https://github.com/nakiostudio/xcov
您可以运行coverage并将忽略的文件放在正确的范围内。
我认为您的问题与收集所有目标的代码覆盖率有关。
- 创建新目标 - 您可以复制现有目标。
- 将主机应用程序更改为全新目标。
- 将测试方案设置更改为新目标作为代码覆盖源。请看一下截图:
- 请记住添加到您的测试文件
@testable import UnitTestExampleCodeCoverage
- 添加到您想要的新目标文件。在我的例子proj我有:
AppDelegate
,ViewController
,ViewController2
,ViewController3
,ViewController4
,View
,View2
,View3
,View4
。我添加到新目标:AppDelegate
,ViewController3
,ViewController4
,View3
,View4
所以只有这五个类应该是计算代码覆盖率的基础。 - 在您的课程中添加测试。
- 代码覆盖率报告仅包含添加到新目标的类。请记住,旧目标可以是您的主要目标 - 新目标只是实现目标的一种抽象层:“从代码覆盖率报告中删除一些类”。
这是整个项目:https://github.com/mStaruchowicz/SO55723759
快乐测试;)
如果您想要可自定义的UT覆盖率报告,您可以忽略所需的文件,Slather可能是最好的工具。
您可以通过在.slather.yml
选项下的ignore
文件中配置文件来忽略覆盖率计算中的文件。
请查看详细信息here如何忽略。
当单元测试运行时,
- 您的应用已启动
- 测试被注入并运行
问题是应用程序启动会启动您的正常序列,创建视图并可能启动一些网络调用。这不仅会干扰代码覆盖率报告 - 它可能会使您的单元测试中毒。例如,如果您通过单元测试触发通知来测试通知,则需要知道侦听该通知的唯一对象是由测试创建的,而不是来自应用程序启动。
忽略某些文件覆盖范围的另一个问题是:您将如何查看这些文件的单元测试覆盖率?
解决方案是使用不同的app委托进行测试,几乎不做什么。有关详细信息,请参阅How to Switch Your iOS App Delegate for Improved Testing
以上是关于为什么?在单元测试覆盖范围内显示的类即使未在测试目标中添加的主要内容,如果未能解决你的问题,请参考以下文章
协程主体未涵盖在单元测试代码覆盖范围内 - Android Studio
为啥使用 jasmine 对 Node typescript 项目进行 Karma 单元测试会显示包含依赖项的覆盖范围?