如何获得 private init 的覆盖
How to get coverage for private init
上下文
在a framework I'm currently building, I am using multiple structs (example)中存放String常量。假设一个看起来像这样:
public struct SpecificConstants {
private init() {}
public static let foo: String = "foo"
}
一切都很好。您可以使用常量,它不会弄乱全局命名空间,结构名称说明其中定义的常量的特定用途。
此外,通过将 init()
设为私有,在框架内部(它是开源的)和框架外部都清楚地表明不应实例化此结构。如果您要创建它的一个实例,那不会有什么坏处,但它也根本没有用。此外,如果 init 不是私有的,它会出现在自动完成中,这会让我很烦:)
问题
我很自豪地为框架编写了很多测试,并且我正在使用 Xcode 的内部覆盖率报告 (llvm cov)。不幸的是,此覆盖率报告将 init 显示为 'not covered':
这是完全合乎逻辑的,因为 init 没有被测试运行,因为它不可能。
令我苦恼的是,这使我无法获得 100% 的良好覆盖率。
可能的解决方案
我可以使用 lcov,这将使我能够使用 LCOV_EXCL_LINE
或 LCOV_EXCL_START
和 LCOV_EXCL_STOP
从覆盖范围中排除初始化。
为什么不呢: 当 Xcode.
中已经有一个内置工具时,我希望不必设置不同的覆盖工具
我可以使 init 可以在内部访问,这样我就可以通过将模块导入为 @testable
.
在我的单元测试中访问它们
为什么不: 虽然它们仍然无法从框架外部访问,但现在它们在框架内是可见的,我不喜欢这样。我希望他们是私人的 :D
我可以忍受我的覆盖率从未达到 100%。
为什么不呢:因为我做不到:).
问题
有没有什么办法(我可以忍受它有点,甚至很老套)运行 这个在我的单元测试中被遗弃的初始化,同时保持它从外部和框架内部都无法访问?
将您的字符串常量移动到一个枚举中,那么您将不需要私有初始化。
enum SpecificConstants {
static let foo = "foo"
}
上下文
在a framework I'm currently building, I am using multiple structs (example)中存放String常量。假设一个看起来像这样:
public struct SpecificConstants {
private init() {}
public static let foo: String = "foo"
}
一切都很好。您可以使用常量,它不会弄乱全局命名空间,结构名称说明其中定义的常量的特定用途。
此外,通过将 init()
设为私有,在框架内部(它是开源的)和框架外部都清楚地表明不应实例化此结构。如果您要创建它的一个实例,那不会有什么坏处,但它也根本没有用。此外,如果 init 不是私有的,它会出现在自动完成中,这会让我很烦:)
问题
我很自豪地为框架编写了很多测试,并且我正在使用 Xcode 的内部覆盖率报告 (llvm cov)。不幸的是,此覆盖率报告将 init 显示为 'not covered':
这是完全合乎逻辑的,因为 init 没有被测试运行,因为它不可能。
令我苦恼的是,这使我无法获得 100% 的良好覆盖率。
可能的解决方案
我可以使用 lcov,这将使我能够使用
LCOV_EXCL_LINE
或LCOV_EXCL_START
和LCOV_EXCL_STOP
从覆盖范围中排除初始化。
为什么不呢: 当 Xcode. 中已经有一个内置工具时,我希望不必设置不同的覆盖工具
我可以使 init 可以在内部访问,这样我就可以通过将模块导入为
@testable
.
在我的单元测试中访问它们 为什么不: 虽然它们仍然无法从框架外部访问,但现在它们在框架内是可见的,我不喜欢这样。我希望他们是私人的 :D我可以忍受我的覆盖率从未达到 100%。
为什么不呢:因为我做不到:).
问题
有没有什么办法(我可以忍受它有点,甚至很老套)运行 这个在我的单元测试中被遗弃的初始化,同时保持它从外部和框架内部都无法访问?
将您的字符串常量移动到一个枚举中,那么您将不需要私有初始化。
enum SpecificConstants {
static let foo = "foo"
}