Objective C中的@testable import有什么替代方案?

19

我正在使用Xcode中提供的Objective-C的XCTest进行单元测试。

我知道如何像下面这样在Swift中导入模块。


@testable import  AppName

在 Objective-C 中有什么替代方案。


你不能只是 #import 它们吗?或者你想访问 Objective C 的私有方法? - Tomer
1
@Tomer:那么我需要导入所有文件来编译UnitTestCase目标源代码,这似乎不是一个好的解决方案。 - Babul Prabhakar
你的测试目标已链接到主目标。除了导入.h文件外,你还需要什么? - Jon Reid
@Jon Ried:UITests有不同的目标,这就是为什么我需要将应用程序文件导入到我的UI测试目标中的原因。 - Babul Prabhakar
这对混合代码来说是一个巨大的问题,如果你有一个使用Swift类的Objective-C类,你无法测试Objective-C类,因为Swift类不包含在测试中。我不知道他们怎么会没有考虑到这一点。除了将所有测试都写在Objective-C中并将文件包含在测试目标中之外,你有找到其他解决方案吗?我试过禁用测试功能,但是我有一些从nib中加载的测试,而且这些类的模块名称和运行应用程序时不同,所以测试失败了。 - Cristi Băluță
2个回答

9

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

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

如果你需要对内部的 Swift 方法进行单元测试,你将需要用 Swift 编写你的测试。


1
根据苹果文档注释:@testable 仅为“内部”函数提供访问权限;即使使用 @testable,也无法在文件外部看到“私有”声明。 - Babul Prabhakar
@BabulPrabhakar 好的,谢谢,我已经修复了。 - Sulthan

7

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

此外,在Xcode 6中,你的主目标应该已经链接到测试目标。如果没有,尝试勾选“允许测试Host应用程序API”复选框,位于你的测试目标 > 一般 > 测试中。欲了解更多信息,请参考此问题


我一直在使用功能性UI测试,其中我必须模拟应用程序中使用的Core-Data对象,因此这个解决方案在我的情况下不起作用。 - Babul Prabhakar
7
只需简单地#import什么?如果Swift文件不在测试目标中,则它们不会出现在AppTest-Swift.h中,在编译测试目标时也无法访问App-Swift.h。 - Uncommon
@Uncommon - 将它们添加到测试目标中,然后它们将包含在AppTest-Swift.h中。 - Inti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接