从 Swift 测试文件中调用 Objective-C 类
Posted
技术标签:
【中文标题】从 Swift 测试文件中调用 Objective-C 类【英文标题】:Call an Objective-C class from a Swift test file 【发布时间】:2016-08-22 18:47:09 【问题描述】:我正在实施单元测试。最初的项目是用 Objective-C 编写的。
我创建了一个用 Swift 编写的新测试目标。
如何在我的测试文件中调用实际应用的 Objective-C 类?
我已尝试执行以下操作。
@testable import MyModule
但是,这似乎只有在所有文件都在 Swift 中时才有效,但对我来说并非如此。
我在项目设置中尝试了其他一些方法,但是这些方法似乎都不起作用。
我是否遗漏了一些明显的东西?
class MyTests: XCTestCase
override func setUp()
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
override func tearDown()
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
func testExample()
let vc = HomeViewController() //this line is failing. How do I expose this view controller written in objective c?
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
【问题讨论】:
【参考方案1】:您需要创建桥接头并将 Objective-C 文件添加到其中。
创建桥接头YourProductName-Bridging-Header.h
,然后在桥接头中创建import HomeViewController
。
将 Objective-C 代码从同一目标导入 Swift
在您的 Objective-C 桥接头文件中,导入每个 Objective-C 您想向 Swift 公开的标头。例如:
#import "XYZCustomCell.h" #import "XYZCustomView.h" #import "XYZCustomViewController.h"
在 Build Settings 中,在 Swift Compiler - Code Generation 中,确保 Objective-C Bridging Header 下的构建设置具有桥接头文件的路径。路径 应该与您的项目相关,类似于您的 Info.plist 路径在构建设置中指定。在大多数情况下,您不应该 需要修改这个设置。
以下是一些可以帮助您的资源
-
Using Swift with Objective-C
Answer to another stack overflow qustion
How to use Objective-C in swift
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 有意义,将它们复制过来 所以理论上,如果我想测试每个类,每个视图控制器......我必须将每个头文件都包含到那个桥接头文件中? 是的,如果您将objective-c代码导入到swift中,您必须这样做,或者您可以在objective c中创建一个头文件来导入所有类,然后将该头文件导入桥接头中,这在技术上与您在桥接头中导入所有内容相同。以上是关于从 Swift 测试文件中调用 Objective-C 类的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swift 调用 Objective-C 类的工厂方法?
从 Objective C 调用 Swift 中定义的 NSString 扩展
是否可以使用情节提要从 swift 类中调用 Objective c 视图控制器类?