使 swift 内部函数对测试目标不可用
Make swift internal function unavailable for Test Target
我想创建一个 class 的函数或便利初始化,当使用 @testable import 导入时,它不能用于 TestTarget,我不确定它是可能,但正在寻找任何方法来限制它。
class A {
// Should not be accessible in Test Target
func foo() {
}
}
在测试中 @testable import 它应该不可用。
/**********
更新
***********/
问题陈述
Long param init 方法与便利方法一起使用以提供默认参数,但在测试中,我不想使用默认参数访问该便利方法,因为很容易忘记提供模拟依赖性。
将该函数标记为 Private
。那么它将无法在测试目标中使用。
您不能从另一个模块访问私有实体,这也适用于测试目标。这就是访问控制的目的。
有两种解决方案。
- 您可以在您的
init
中添加以下代码
#if DEBUG
if let _ = NSClassFromString("XCTest") {
fatalError("Should not be used in unit test.")
}
#endif
使用此解决方案,您仍然可以在单元测试中使用此 init
,但它会在运行时崩溃。
- 添加一个新的配置
Testing
,你可以通过Select your debug config -> Click + -> Duplicate Debug
来完成,并重命名为Testing
然后在您的主要目标中,在配置 Testing
中添加一个新标志 TESTING
。
接下来转到 Product -> Scheme -> Edit Scheme
为您的 Test
将构建配置设置为 Testing
最后在您的 init
周围添加这个。
#if !TESTING
init() {}
#endif
现在,您应该无法在单元测试中使用此 init
。
您可以 import
模块而不是 @testable import
。
我想创建一个 class 的函数或便利初始化,当使用 @testable import 导入时,它不能用于 TestTarget,我不确定它是可能,但正在寻找任何方法来限制它。
class A {
// Should not be accessible in Test Target
func foo() {
}
}
在测试中 @testable import 它应该不可用。
/********** 更新 ***********/
问题陈述
Long param init 方法与便利方法一起使用以提供默认参数,但在测试中,我不想使用默认参数访问该便利方法,因为很容易忘记提供模拟依赖性。
将该函数标记为 Private
。那么它将无法在测试目标中使用。
您不能从另一个模块访问私有实体,这也适用于测试目标。这就是访问控制的目的。
有两种解决方案。
- 您可以在您的
init
中添加以下代码
#if DEBUG
if let _ = NSClassFromString("XCTest") {
fatalError("Should not be used in unit test.")
}
#endif
使用此解决方案,您仍然可以在单元测试中使用此 init
,但它会在运行时崩溃。
- 添加一个新的配置
Testing
,你可以通过Select your debug config -> Click + -> Duplicate Debug
来完成,并重命名为Testing
然后在您的主要目标中,在配置 Testing
中添加一个新标志 TESTING
。
接下来转到 Product -> Scheme -> Edit Scheme
为您的 Test
将构建配置设置为 Testing
最后在您的 init
周围添加这个。
#if !TESTING
init() {}
#endif
现在,您应该无法在单元测试中使用此 init
。
您可以 import
模块而不是 @testable import
。