Swift + Objective-C项目应该如何设置unit testing

我很难find如何在Xcode 6b4中configurationtesting目标。 鉴于这种情况,有人能指出我的正确方向吗?

我有一个主要的Swift项目。 但是,有一些第三方的Objective-C依赖关系,它们被放到应用程序的桥接头中。 我想为我的Swift代码编写testing。 理想的是,在Swift中。 我有这个问题是这个….

  1. 如果我创build一个Swifttesting用例,那么编译器会抱怨在应用程序的桥接头中找不到Objective-C头文件。

  2. 如果我创build一个Objective-Ctesting用例,那么我不能导入我想testing的Swift类。

我唯一能做的就是编写Objective-Ctesting用例,它不会触及任何Swift。 由于Objective-C的依赖关系,我不能写“纯粹的Swift代码/testing”。

有没有人有任何build议或在这方面取得成功。 或者,这是Beta 4中事物的当前状态?

从Xcode 6 Beta 4 发行说明已知问题:

testing

•Objective-C编写的unit testing目前不能导入用于应用程序目标的Swift生成的接口头(“$(PRODUCT_MODULE_NAME)-Swift.h”),因此不能用于testing需要此头的代码。 (16931027)

•解决方法:Swift代码的unit testing应该用Swift编写。 在Objective-C中为框架目标编写的unit testing可以通过使用'@import FrameworkName;'导入框架模块来访问Swift生成的接口。

所以,你目前不能在Objective-C中testingSwift代码。

另外从发行说明:

访问控制系统的一个限制是unit testing不能与应用程序中的类和方法进行交互,除非它们被标记为公开的。 这是因为unit testing目标不是应用程序模块的一部分。

Chris Lattner在开发者论坛的这篇文章中表示,他们仍然在评估这个情况,看看他们如何调解unit testing和新实现的访问控制。

所以,我期望Swift自身以及同时使用Swift和Objective-C的项目的unit testing有很多变化。

我不确定您是否仍然在寻找这个,因为XCode 6不再处于testing阶段,但是您可以在目标设置中将您的Objective-C桥接头文件添加到您的unit testing目标中。 这为我解决了这个问题。

在这里输入图像说明

我们做了这个工作,我看到了所有可能的错误:从故事板获取VC时的模块名错误,特定于coredata实体的MyType_MyType_错误等,但是这是最糟糕的。

诀窍是使用构build目标中的-Swift.h文件,而不是testing目标,因为在testing目标中,有时候必须包含objc文件而不是swift文件,而objc如果链接在一起则不会识别这些文件,而是构build目标一切都在那里。

  • 首先确保testing目标的-Swift.h没有与构build目标命名相同。

  • 从debugging目标包括在testing.pch或每个单独的文件中的-Swift。

  • 让编译器通过编辑用户头searchpath来知道该文件在哪里(在derivedsources中):$(OBJROOT)/MyProjectName.build/Debug-iphonesimulator/MyProjectTarget.build/DerivedSources如果不确定,只需进入inFinder并find名称即可。 如果名称中有空格,则需要在空格前添加\

  • 您可以在这里find更多关于项目variables的信息: 如何在Xcode项目中打印“Build Settings”列表?

  • 始终search用户path应设置为是

  • 不要在testing目标中包含swift文件,而是使用@testable

我希望苹果在下一个xcode中解决了这个问题。

我通过将“Objective-c生成的接口标题名称”更新为“YourApplication-Swift.h”

默认情况下这个设置是为了生成TargetName-Swift.h,编译器永远不会生成YourApplicaitonTest-Swift.h

当我试图找出如何从我的Swifttesting中访问我的项目的Swift代码时,我遇到了这个问题。 我的项目和testing最初都是在Objective-C中开始的,所以它们都具有桥接头设置。

为了从我的项目中访问Swift类,我不得不添加:

 @testable import MyProjectName 

到我的Swifttesting文件的顶部。 在构buildtesting之后,Xcode识别了我的swift代码。

我希望能帮助别人。

我有这个问题,并试图解决它在testing目标的build立设置。 通过更改searchpath,导入swift头文件,在桥接头文件中导入东西。 但事实certificate,在我的podfile。 我不得不添加一个link_with与testing目标。 喜欢这个:

 platform :ios, '8.0' link_with 'YourApp', 'YourAppTests' pod 'ThePopularPod', '1.2.3', :inhibit_warnings => true 

尝试将#import "xyz-Swift.h"语句放入预编译的头文件中。 这样你就可以得到所有Obj-C头文件的不同导入语句,具体取决于目标:

MyProject-Prefix.pch(应用程序目标):

 #import "MyProject-Swift.h" 

MyProjectTests-Prefix.pch(testing目标):

 #import "MyProjectTests-Swift.h"