我只是想从其他文件中包含我的Swift类,比如它的测试
PrimeNumberModel.swift
import Foundation
class PrimeNumberModel { }
Run Code Online (Sandbox Code Playgroud)
PrimeNumberModelTests.swift
import XCTest
import PrimeNumberModel // gives me "No such module 'PrimeNumberModel'"
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel() // "Use of unresolved identifier 'PrimeNumberModel'"
}
Run Code Online (Sandbox Code Playgroud)
两个swift文件都在同一目录中.
H6.*_*H6. 128
我有同样的问题,也在我的XCTestCase文件中,但不是在常规项目文件中.
摆脱:
使用未解析的标识符'PrimeNumberModel'
我需要import测试文件中的基本模块.在我的情况下,我的目标被称为'myproject'并且我添加了import myproject并且该类被识别.
Dio*_*o T 67
现在您不需要public将方法添加到测试中.在Swift 2上,只需要添加@testable关键字.
PrimeNumberModelTests.swift
import XCTest
@testable import MyProject
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel()
}
Run Code Online (Sandbox Code Playgroud)
而你的内部方法可以保留 Internal
PrimeNumberModel.swift
import Foundation
class PrimeNumberModel {
init() {
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,即使使用private(和fileprivate)符号也不可用@testable.
Swift有两个相关概念(如Xcode 6 beta 6).
Internal access考虑到测试是在另一个目标上,PrimeNumberModelTests.swift您需要import包含要测试的类的目标,如果调用目标,则MyProject需要添加import MyProject到PrimeNumberModelTests:
PrimeNumberModelTests.swift
import XCTest
import MyProject
class PrimeNumberModelTests: XCTestCase {
let testObject = PrimeNumberModel()
}
Run Code Online (Sandbox Code Playgroud)
但是,这是不够的,测试类PrimeNumberModel,因为默认访问控制水平Internal Access,你的类不会对测试束可见的,所以你需要使它Public Access和所有要测试的方法:
PrimeNumberModel.swift
import Foundation
public class PrimeNumberModel {
public init() {
}
}
Run Code Online (Sandbox Code Playgroud)
Nit*_*hel 46
它在文档中说Swift中没有import语句.

只需使用:
let primNumber = PrimeNumberModel()
Run Code Online (Sandbox Code Playgroud)
Fom*_*tia 17
在Objective-C中,如果你想在另一个文件中使用一个类,你必须导入它:
#import "SomeClass.h"
Run Code Online (Sandbox Code Playgroud)
但是,在Swift中,您根本不需要导入.只需使用它就像它已经导入一样.
// This is a file named SomeClass.swift
class SomeClass : NSObject {
}
// This is a different file, named OtherClass.swift
class OtherClass : NSObject {
let object = SomeClass()
}
Run Code Online (Sandbox Code Playgroud)
如您所见,不需要导入.希望这可以帮助.
根据Apple,您不需要在同一目标中导入swift文件.我终于通过将我的swift文件添加到我的常规目标和测试目标来实现它.然后我使用桥接头进行测试,以确保我在常规桥接头中引用的ObjC文件可用.现在就像魅力一样.
import XCTest
//Optionally you can import the whole Objc Module by doing #import ModuleName
class HHASettings_Tests: XCTestCase {
override func setUp() {
let x : SettingsTableViewController = SettingsTableViewController()
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() {
// This is an example of a functional test case.
XCTAssert(true, "Pass")
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measureBlock() {
// Put the code you want to measure the time of here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,请确保PrimeNumberModel具有测试目标的目标.或High6导入整个模块的解决方案将起作用
从 Swift 2.0 开始,最佳实践是:
将这一行添加@testable import MyApp到您的测试文件的顶部,其中“MyApp”是您的应用程序目标的产品模块名称(可在您的应用程序目标的构建设置中查看)。就是这样。
(请注意,产品模块名称将与您的应用程序目标名称相同,除非您的应用程序目标名称包含空格,这些空格将替换为下划线。例如,如果我的应用程序目标名为“Fun Game”,我会写@testable import Fun_Game在我的测试的顶部。)
| 归档时间: |
|
| 查看次数: |
159629 次 |
| 最近记录: |