【发布时间】:2015-11-10 20:19:31
【问题描述】:
背景:我想用 XCTest 测试私有方法,所以我正在寻找一个优雅的解决方案来向我的 XCTestCase 类公开私有方法。
免责声明:有些人认为测试类的内部是根本错误的。在实践中我不同意,因为当测试中断时,测试 private 可以更容易地追踪问题。
Swift 的私有函数对文件来说是私有的,而私有真正的意思是私有的,因此没有办法将私有函数暴露给其他文件。使用预处理器宏,可以通过公共函数公开私有功能,仅用于一个构建配置。例如,我为我的测试配置设置了一个TEST 编译标志,我的测试方案使用它。
到目前为止,这是我拥有的最佳解决方案,但它需要为每个需要测试的私有函数提供烦人的样板:
在 ClassThatNeedsTesting.swift 中:
class ClassThatNeedsTesting {
#if TEST
func publicAccessToPrivateFunctionThatNeedsTesting() -> Bool {
return self.privateFunctionThatNeedsTesting()
}
#endif
private func privateFunctionThatNeedsTesting() -> Bool {
return true;
}
}
在 TestClass.swift 中:
class TestClass: XCTestCase {
func testExample() {
XCTAssert(ClassThatNeedsTesting().publicAccessToPrivateFunctionThatNeedsTesting());
}
}
但是有没有办法使用内联预处理器宏来简化这一点?这就是我想要的,但它没有编译,因此我问:
在 ClassThatNeedsTesting.swift 中:
class ClassThatNeedsTesting {
#if TEST private #endif func privateFunctionThatNeedsTesting() -> Bool {
return true;
}
}
在 TestClass.swift 中:
class TestClass: XCTestCase {
func testExample() {
XCTAssert(ClassThatNeedsTesting().privateFunctionThatNeedsTesting());
}
}
如果没有办法做到这一点,也许有更简单的解决方案?
【问题讨论】:
标签: xcode swift unit-testing testing