在我正在构建的a framework中,我使用多个结构(example)来存储String常量。让我们说一个看起来像这样:
public struct SpecificConstants {
private init() {}
public static let foo: String = "foo"
}
这一切都很好。您可以使用常量,它不会使全局命名空间混乱,结构名称表示在其中定义的常量的特定目的。
此外,通过使init()
私有,它在框架(它的开源)内部变得清晰,并且在它之外,不应该实例化该结构。如果您要创建它的实例,它也不会受到伤害,但它根本没用。此外,初始化将显示在自动完成中,如果它不是私有的,这会让我烦恼:)
我很自豪地为框架编写了很多测试,我正在使用Xcode的内部报道(llvm cov)。不幸的是,此覆盖率报告显示init为“未涵盖”:
这是完全合乎逻辑的,因为测试不会运行init,因为它不能 令我痛苦的是,这使我无法获得100%的良好报道。
我可以使用lcov,这样我就可以使用LCOV_EXCL_LINE
或LCOV_EXCL_START
和LCOV_EXCL_STOP
来排除来自覆盖范围的内容。
为什么不:当Xcode中已有内置工具时,我不需要设置不同的覆盖工具。
我可以在内部访问这些内容,以便我可以通过将模块导入@testable
来获取单元测试中的内容。
为什么不:虽然它们仍然无法从框架外部访问,但它们现在在框架内可见,我不喜欢。我希望他们变得私密:D
我可以忍受我的保险从未达到100% 为什么不:因为我不能:)。
在我的单元测试中运行这个被丢弃的init,同时保持从外部和框架内部无法访问,有什么方法(我可以忍受它有点,甚至是非常hacky)?
答案 0 :(得分:3)
将String常量移动到枚举,然后您将不需要私有init。
enum SpecificConstants {
static let foo = "foo"
}