【问题标题】:Whats the alternative of @testable import in Objective CObjective C 中 @testable 导入的替代方法是什么
【发布时间】:2016-08-21 17:10:40
【问题描述】:

我正在使用 Xcode 在 Objective C 中提供的 XCTest 在 Xcode 中进行单元测试。 我知道如何在 Swift 中导入模块,如下所示。


@testable import  AppName

目标 C 中的替代方案是什么。

【问题讨论】:

  • 你就不能#import他们吗?或者你想访问 Objective C 的私有方法?
  • @Tomer :然后我需要导入所有文件来编译 UnitTestCase 目标的源代码,这似乎不是一个好的解决方案。
  • 您的测试目标与您的主要目标相关联。除了导入.h,你还需要什么?
  • @Jon Ried : UITests 有不同的目标,这就是为什么我需要将应用程序文件导入我的 ui 测试目标。
  • 这对于混合代码来说是个大问题,如果你有一个使用 swift 类的 objc 类,你不能测试 objc 类,因为 swift 类不包含在测试中,我不知道他们怎么可能没想到。除了在 objc 中编写所有测试并将文件包含在测试目标中之外,您是否找到任何解决方案?我试图禁用可测试性,但我有一些从 nib 加载的测试,并且这些类的模块名称与运行应用程序时不同,所以它失败了。

标签: ios objective-c xctest xcode7.3


【解决方案1】:

在 Objective C 中,您可以简单地 #import 它们,因为没有像 Swift 那样的“内部”方法访问限制。

此外,在 Xcode 6 上,您的主要目标应该已经链接到测试目标。如果没有,请尝试选中“测试目标”>“常规”>“测试”中的“允许测试主机应用程序 API”复选框。请查看this question 了解更多信息。

【讨论】:

  • 我一直在使用功能 UI 测试,我必须模拟应用程序中使用的核心数据对象,因此这个解决方案不适用于我的情况。
  • 只需#import 什么?如果 Swift 文件不在测试目标中,则它们不会在 AppTest-Swift.h 中,并且在编译测试目标时无法访问 App-Swift.h。
  • @Uncommon - 将它们添加到测试目标中,然后它们将包含在 AppTest-Swift.h 中
【解决方案2】:

@testable 覆盖 Swift 中的访问权限,允许您在单元测试中测试 internal 方法。

Objective-C 没有这样的访问修饰符,因此您不需要@testable,您只需正常导入模块即可。

如果您需要对内部 Swift 方法进行单元测试,则必须使用 Swift 编写测试。

【讨论】:

  • 根据苹果文档Note: @testable provides access only for “internal” functions; “private” declarations are not visible outside of their file even when using @testable.
  • @BabulPrabhakar 好的,谢谢,我已经解决了。
猜你喜欢
  • 2015-10-28
  • 1970-01-01
  • 2011-01-15
  • 2012-01-27
  • 2020-01-25
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多