objective-c - 如何使用 Swift 测试 Objective-C 框架的内部结构

标签 objective-c swift testing module frameworks

我有一个用 Objective-C 编写的框架/模块,想用 Swift 测试其外部接口(interface)内部结构。为此,我在同一项目中针对框架创建了一个新的测试目标。在 Swift 代码中,我可以毫无问题地导入模块和使用公共(public)类。但是,我无法访问测试中的内部类。

我尝试了以下方法:

  • 我将内部资源的可见性设置为“项目”。据我了解,应该使它们可用于同一项目中的代码。但是,它不起作用。还是我需要以不同的方式导入它们?
  • 我还在 Xcode 7 中尝试了 Swift 2 的新 @testable import 功能,但这似乎(目前)不适用于 Objective-C 框架。

我想到的是在测试目标的桥接 header 中手动导入我要测试的所有私有(private)源。这样可行。但是,感觉这并不是使用 Swift 测试 Objective-C 框架的预期方式。

关于如何做得更好的任何想法?

最佳答案

我过去处理此类问题的方法是在框架内创建公共(public)类,将您要测试的内部类子类化。您可以添加编译器标志,使它们仅使用调试或测试配置构建。

例如,如果您有一个名为 SomeClass 的类,您将拥有 SomeClassTest,它会公开覆盖所有方法。这样做还使您能够轻松地包含测试逻辑,例如在需要的地方插入虚拟数据等。

关于objective-c - 如何使用 Swift 测试 Objective-C 框架的内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984057/

相关文章:

python - 在生菜测试步骤中传入多个参数

iphone - 检测应用内购买的重复购买

iOS 如何比较对象是否相等?

iphone - 替换 html 字符串中的图像 URL

ios - 使用 TabBarController 自定义 NavigationBar 高度

testing - "integration testing"、 "continuous integration servers"和 "nightly builds"之间的关系是什么?

ios - 尝试在一个屏幕上显示三张全景照片时应用程序崩溃

ios - 根据用户的位置检索地理定位图像

ios - 如何使用 CAShapeLayer 和 UIBezierPath 在实时摄像头源上绘制检测到的矩形路径

javascript - 访问选项值 webdriver.io