从Swift测试文件中调用Objective-C类

时间:2016-08-22 18:47:10

标签: objective-c swift unit-testing

我正在努力实施单元测试。原始项目是用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 个答案:

答案 0 :(得分:5)

您需要创建桥接标头并将Objective-C文件添加到其中。 在桥接标题中创建桥接标题YourProductName-Bridging-Header.h然后import HomeViewController

  

将Objective-C代码从同一目标导入Swift

     

在Objective-C桥接头文件中,导入每个Objective-C   你希望暴露给Swift的标题。例如:

     

导入“XYZCustomCell.h”

     

导入“XYZCustomView.h”

     

import“XYZCustomViewController.h”在构建设置中,在Swift编译器 - 代码生成中,确保Objective-C桥接头

     

构建设置下有一个桥接头文件的路径。路径   应该与您的项目相关,类似于Info.plist的方式   path在Build Settings中指定。在大多数情况下,你不应该   需要修改此设置。

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

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