首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码覆盖率结果与Xcode 7中的真实覆盖率不一致

代码覆盖率结果与Xcode 7中的真实覆盖率不一致
EN

Stack Overflow用户
提问于 2015-06-22 17:48:10
回答 5查看 6.6K关注 0票数 20

我在启用了代码覆盖率数据Xcode7Beta 2的应用程序中运行测试用例,但是当我的所有测试用例都成功运行时,我只能获得很少的文件覆盖率数据。

一些文件已经覆盖了单元测试用例的所有代码,但仍然显示了3%的代码覆盖率。

例如:

这是代码覆盖率的结果,正如您在右侧看到的,这里有一个信息,即这些代码行在测试期间被调用了多少次。在本例中为- 0。

但是..。

在测试中,我们可以看到这个函数确实被调用了。多少次?哦..。至少一次。这个号码是由右边的信息提供的。

因此,上面的代码应该标记为已调用,而不是灰显:-)

有人能解释这个吗?这一切为什么要发生?

EN

回答 5

Stack Overflow用户

发布于 2015-08-01 15:33:11

IT WORKS

  1. 自从苹果发布了@testable关键字来将你的项目导入到测试目标之后,你就不再需要同时将文件同时添加到两个目标中了:

  1. ,所以只需删除测试目标中的所有文件:

在需要从测试目标访问文件的任何地方,只需使用以下命令导入目标即可:@testable import MyApp

  1. 对项目中的每个文件执行此操作。

那么代码覆盖率就会工作得很好。

Swift 2 + Xcode 7: Unit Testing Access Made Easy!!!!阅读更多信息

如果您需要了解如何使用代码覆盖率,请阅读How to use code coverage in Xcode 7?

正如@Gerd Castan之前提到的:“因此,在我看来,当存在至少一个未测试该方法的目标时,该方法的覆盖率显示为0。”

解决方案很简单。不要让编译器认为这个文件包含在多个目标中,而是使用@testable关键字导入您的模块。

票数 28
EN

Stack Overflow用户

发布于 2015-07-23 02:21:43

我想我发现了XCTest coverage在做什么,这是有意义的:

我的设置:

编译成target1的class1

编译成target1和target2的class2

测试设置:

代码语言:javascript
复制
import XCTest
@testable import target1

class MyTests: XCTestCase {
    func testSomething() {
        someMethodFromClass1()
        someMethodFromClass2()
    }
}

我发现class1 (编译成target1)显示测试覆盖率,而class2 (编译成target1和target2)没有显示测试覆盖率。

因此,在我看来,当存在至少一个未测试该方法的目标时,该测试方法显示的覆盖率为0。

这很有意义,因为在目标中测试方法并不能说明它在不同目标中的行为。

苹果希望我们测试所有的目标。

更新再给出一个提示来支持这一理论:

转到报表导航器

然后单击coverage。

如果您有多个目标,您会看到文件按目标分组。

如果你在两个目标中有一个文件,你会看到你的文件两次。

如果在两个目标中都有一个文件,则会显示这一个文件对两个目标的代码覆盖率。并且(至少在我的项目中)一个文件在每个目标中都有不同的蓝线:

目标1的覆盖范围:

目标2中同一测试运行的同一项目中的同一文件的覆盖率:

如果你在源代码编辑器中查看你的测试覆盖率,苹果必须决定它显示给你的是哪一个覆盖率。我认为在源代码编辑器中显示覆盖率最低的目标是苹果所能做的最好的事情。

特殊情况下的简单修复:

如果你的第二个目标是你的测试目标:不要编译成你的测试目标并使用@testable import

对于所有其他情况,您必须测试每个目标。

票数 4
EN

Stack Overflow用户

发布于 2015-07-08 06:14:22

我在苹果开发者论坛上查看了这个主题,在阅读了各种帖子后,我想我找到了解决方案。

为了让事情正常工作,有必要:

将所有应用程序源文件从测试目标中删除,然后在单元测试源中放置@testable import <NameOfYourModule>

  • Re-build -

-

我用我当前的项目对此进行了测试,结果要好得多。

原始解决方案配方可在以下网址找到:http://natashatherobot.com/swift-2-xcode-7-unit-testing-access/

此外,该功能似乎有点原始,因此可能会出现bug,Apple建议在事情没有像预期的那样工作时提交bug报告:

我亲眼看到了一些非常大的项目的代码覆盖率结果。目前,该支持最适用于应用程序和框架。如果这就是您正在测试的,那么最好是您可以在https://bugreport.apple.com上提交一份错误报告,这样我们就可以调查您的特定情况。就此而言,无论你有什么类型的项目,bug报告都是一件好事。如果可能,最好将报告实际放在项目中。如果您不能做到这一点,请尽可能详细地描述它的设置。照片很好。

原文:https://forums.developer.apple.com/message/9733#9733

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30976820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档