除了命令行项目以外,当你在 Xcode 7 中创建新项目时,单元测试 Target 默认是包含的。为命令行项目设置测试 Target 要编写单元测试,你需要能够在测试 Target 中使用主 target 代码。
为了测试用 Swift 写的代码,你需要做以下两件事:
- 将
.xcodeproj中的 "defines module" 设置为YES。
- Xcode 中具体操作方法:选中你的项目,选择 "Build Settings" 选项列表,选中 "Defines Modules" 行,修改其值为 "Yes"。
- 在单元测试中添加
@testable import YourAppModuleName。这会把所有public和internal(默认访问修饰符) 修饰符暴露给测试代码。但private修饰符仍旧保持私有。
// MyAppTests.swift
import XCTest
@testable import MyModule
class MyClassTests: XCTestCase {
// ...
}一些开发者提倡添加 Swift 源文件至测试 target。然而这会导致以下问题 subtle, hard-to-diagnose errors,所以并不推荐。
- 给你的测试 target 添加 bridging header 文件。
- 在 bridging header 文件中,引入待测试的代码文件。
// MyAppTests-BridgingHeader.h
#import "MyClass.h"现在就可以在 Swift 测试文件中使用 MyClass.h 中的代码了。
- 使用
@objc桥接需要使用 Objective-C 测试的 Swift 类和方法。 - 在单元测试中引入模块的 Swift 头文件。
@import XCTest;
#import "MyModule-Swift.h"
@interface MyClassTests: XCTestCase
// ...
@end在测试 target 中引入待测试的代码文件:
// MyAppTests.m
@import XCTest;
#import "MyClass.h"
@interface MyClassTests: XCTestCase
// ...
@end- 在项目窗格中添加一个项目target。
- 选择 "OS X Unit Testing Bundle"。
- 编辑主target的 scheme。
- 选中 "Test" 条目,单击 "Info" 下的 "+",选择需要测试的 bundle。