【问题标题】:Call an Objective-C class from a Swift test file从 Swift 测试文件中调用 Objective-C 类
【发布时间】: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.
    }
}

【问题讨论】:

    标签: objective-c swift unit-testing


    【解决方案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 路径在构建设置中指定。在大多数情况下,您不应该 需要修改这个设置。

    以下是一些可以帮助您的资源

    1. Using Swift with Objective-C
    2. Answer to another stack overflow qustion
    3. How to use Objective-C in swift

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 有意义,将它们复制过来
    • 所以理论上,如果我想测试每个类,每个视图控制器......我必须将每个头文件都包含到那个桥接头文件中?
    • 是的,如果您将objective-c代码导入到swift中,您必须这样做,或者您可以在objective c中创建一个头文件来导入所有类,然后将该头文件导入桥接头中,这在技术上与您在桥接头中导入所有内容相同。
    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2015-03-22
    • 2015-03-30
    • 1970-01-01
    相关资源
    最近更新 更多