2016-01-06 72 views
4

当我在Swift中使用XCTest运行单元测试时,它们在代码覆盖范围关闭时运行正常。但是,一旦我尝试启用代码覆盖,我有一个失败的构建/测试,4个类给出以下错误消息:命令因信号失败:分段错误:11在Swift中打开代码覆盖率时出现分段错误11

+0

这可能是证书或构建目标的问题吗?我发现这个消息来源说这是从归档中获取seg故障时的问题。也许尝试重建证书? http://stackoverflow.com/questions/26731198/swift-segmentation-fault-when-compiling-for-archive-from-ios-7 – Cole

+0

请提供更多详细信息 –

回答

2

没有代码,编译设置等,很难说肯定,但你应该检查的一件事是确保你在单元测试类中使用了一个@testable导入标志。

例如,在您的单元测试课程的顶部名为MyApp的项目中,您将包含以下导入@testable import MyApp

您还需要检查以确保您遵循了启用覆盖的流程。这些信息被记录在苹果的开发者门户:

Code Coverage | Apple Developer

+0

我已经遵循了所有这些步骤。如果在引入代码覆盖率时出现了分段错误,那么将其引入项目以进行调试或研究比我目前所处的位置更深的一般建议是什么? – fadfad

2

这里是我工作(因为所有的其他建议并没有我的情况下工作)。当试图运行代码覆盖范围为ON的单元测试时,我在特定的Swift类上得到了分段错误11。事实证明,我们有像这样一类的财产三元表达式:

let cellBorder : CGFloat = MyHelperClass.isIPad() ? 10.0 : 6.0 

使其成为一个懒惰的VAR解决了这一问题:

lazy var cellBorder : CGFloat = MyHelperClass.isIPad() ? 10.0 : 6.0 

需要明确的是,代码编译和运行良好直到我们尝试开启代码覆盖范围。我也发现这个Open Radarthis guy's post概述了解决方案。似乎是一个苹果的错误。

+1

这解决了我的问题!太棒了,@ n8tr –

+1

我有同样的问题。 'lazy'解决了,但是这也解决了它: 'let cellBorder:CGFloat = MyHelperClass.isIPad()? CGFloat(10.0):CGFloat(6.0)' – Dmitry