Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift&x2B;为单元测试设置Objective-C项目_Ios_Objective C_Swift_Xcode6 - Fatal编程技术网

Ios Swift&x2B;为单元测试设置Objective-C项目

Ios Swift&x2B;为单元测试设置Objective-C项目,ios,objective-c,swift,xcode6,Ios,Objective C,Swift,Xcode6,我发现很难找到如何在Xcode 6b4中配置测试目标。在这种情况下,有人能给我指出正确的方向吗 我有一个快速的项目。但是,存在一些第三方Objective-C依赖项,这些依赖项被放入应用程序的桥接头中。我想为我的Swift代码编写测试。理想情况下,在斯威夫特。我的问题是 如果我创建了一个Swift测试用例,那么编译器会抱怨在应用程序的桥接头中找不到Objective-C头 如果我创建了Objective-C测试用例,那么我就不能导入我想要测试的Swift类 我能做的唯一一件事就是编写Object

我发现很难找到如何在Xcode 6b4中配置测试目标。在这种情况下,有人能给我指出正确的方向吗

我有一个快速的项目。但是,存在一些第三方Objective-C依赖项,这些依赖项被放入应用程序的桥接头中。我想为我的Swift代码编写测试。理想情况下,在斯威夫特。我的问题是

  • 如果我创建了一个Swift测试用例,那么编译器会抱怨在应用程序的桥接头中找不到Objective-C头

  • 如果我创建了Objective-C测试用例,那么我就不能导入我想要测试的Swift类

  • 我能做的唯一一件事就是编写Objective-C测试用例,它不涉及任何Swift。由于Objective-C依赖关系,我无法编写“纯粹的Swift代码/测试”

    是否有人对此有任何建议或取得了成功。或者这就是Beta 4的当前状态?

    来自Xcode 6 Beta 4的已知问题:

    测试

    •以Objective-C编写的单元测试目前无法导入Swift 为生成的接口标题($(产品模块名称)-Swift.h) 应用程序目标,因此不能用于测试 需要此标题。(16931027)

    •解决方法:Swift的单元测试 代码应使用Swift编写。用Objective-C编写的单元测试 对于框架目标,可通过以下方式访问Swift生成的接口: 使用“@import FrameworkName;”导入框架模块

    因此,您目前无法在Objective-C中测试Swift代码

    发布说明中还包括:

    访问控制系统的一个限制是单元测试无法进行 与应用程序中的类和方法交互,除非 标记为公共的。这是因为单元测试目标不是 应用模块

    Chris Lattner在开发人员论坛上表示,他们仍在评估情况,看看如何协调单元测试和新实现的访问控制


    因此,我预计Swift本身以及同时使用Swift和Objective-C的项目中的单元测试都会有很多变化。

    我不确定您是否仍在寻找这一点,因为Xcode 6不再是beta版,但您可以在目标设置中将Objective-C桥接头文件添加到单元测试目标中。这为我解决了这个问题


    我通过将“Objective-c生成的接口头名称”更新为“YourApplication Swift.h”来工作

    默认设置为生成TargetName Swift.h,编译器从不生成应用程序集成测试Swift.h

    尝试将
    #import“xyz Swift.h”
    语句放入预编译的头文件中。 这样,根据目标,所有Obj-C头都有不同的导入语句:

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

    MyProjectTests-Prefix.pch(测试目标):


    我遇到了这个问题,并试图在测试目标的构建设置中解决它。通过更改搜索路径、导入swift标题、导入桥接标题中的内容。然而,它却出现在我的播客文件中。我必须添加一个带有测试目标的
    链接。像这样:

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

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

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

    @testable import MyProjectName
    
    到我的Swift测试文件的顶部。在为测试构建它之后,Xcode识别了我的swift代码


    我希望这能对其他人有所帮助。

    我们做到了这一点,一路上我看到了所有可能的错误:从故事板获取VC时的模块名称错误、特定于coredata实体的MyType\u MyType\u错误,等等,但这是最糟糕的

    诀窍是使用构建目标中的-Swift.h文件,而不是测试目标,因为在测试目标中,有时必须包含objc文件,但不能包含Swift文件,如果这些文件链接在一起,objc将无法识别它们,但在构建目标中,一切都在那里

    • 首先要确保测试目标的-Swift.h与构建目标的名称不同

    • 在tests.pch或每个单独的文件中包含调试目标的-Swift

    • 通过使用:$(OBJROOT)/MyProjectName.build/Debug-iphonesimulator/MyProjectTarget.build/derivedsources编辑用户标题搜索路径,让编译器知道该文件(在derivedsources中)的位置。如果不确定,请进入下一步并查找名称。如果名称中有空格,则需要在空格前添加\号

    • 您可以在此处找到有关项目变量的更多信息:

    • 始终搜索用户路径应设置为“是”

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


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

    对于xcode 10,要在Obj-C测试中使用swift类,您需要在测试目标的用户搜索路径中添加自动生成的标题模块swift.h。

    转到测试目标>生成设置>标题搜索路径,然后添加 $CONFIGURATION\u TEMP\u DIR/YourProject.build/DerivedSources在其中


    更多参考请看

    是的,我已经读过了。所以,问题是,如果我有我想要测试的Swift类和Swift测试用例,当应用程序Swift类需要从桥接头导入Objective-C时,我如何使测试目标编译…@DanielThorpe-我同意,这个答案并没有真正解决你的问题。我也希望针对同样使用ObjC框架的Swift代码编写Swift单元测试。@ColinE-是的,我通过创建另一个Objective-C框架来避免这个问题,该框架包含了Objective
    platform :ios, '8.0'
    link_with 'YourApp', 'YourAppTests'
    pod 'ThePopularPod', '1.2.3', :inhibit_warnings => true
    
    @testable import MyProjectName