我只是想从其他文件中包含我的Swift类,比如它的测试
PrimeNumberModel.swift
import Foundation class PrimeNumberModel { }
PrimeNumberModelTests.swift
import XCTest import PrimeNumberModel // gives me "No such module 'PrimeNumberModel'" class PrimeNumberModelTests: XCTestCase { let testObject = PrimeNumberModel() // "Use of unresolved identifier 'PrimeNumberModel'" }
两个swift文件都在同一目录中.
检查测试目标中PrimeNumberModel.swift的目标成员身份.
我有同样的问题,也在我的XCTestCase
文件中,但不是在常规项目文件中.
摆脱:
使用未解析的标识符'PrimeNumberModel'
我需要import
测试文件中的基本模块.在我的情况下,我的目标被称为'myproject'并且我添加了import myproject
并且该类被识别.
在Objective-C中,如果你想在另一个文件中使用一个类,你必须导入它:
#import "SomeClass.h"
但是,在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() }
如您所见,不需要导入.希望这可以帮助.
现在您不需要public
将方法添加到测试中.在Swift 2上,只需要添加@testable
关键字.
PrimeNumberModelTests.swift
import XCTest @testable import MyProject class PrimeNumberModelTests: XCTestCase { let testObject = PrimeNumberModel() }
而你的内部方法可以保留 Internal
PrimeNumberModel.swift
import Foundation class PrimeNumberModel { init() { } }
请注意,即使使用private
(和fileprivate
)符号也不可用@testable
.
Swift有两个相关概念(如Xcode 6 beta 6).
您不需要导入Swift类,但需要导入外部模块(目标)
Swift中的默认访问控制级别是Internal access
考虑到测试是在另一个目标上,PrimeNumberModelTests.swift
您需要import
包含要测试的类的目标,如果调用目标,则MyProject
需要添加import MyProject
到PrimeNumberModelTests
:
PrimeNumberModelTests.swift
import XCTest import MyProject class PrimeNumberModelTests: XCTestCase { let testObject = PrimeNumberModel() }
但是,这是不够的,测试类PrimeNumberModel
,因为默认访问控制水平Internal Access
,你的类不会对测试束可见的,所以你需要使它Public Access
和所有要测试的方法:
PrimeNumberModel.swift
import Foundation public class PrimeNumberModel { public init() { } }
我能够通过清理我的构建来解决这个问题.
顶部菜单 - >产品 - >清洁或键盘快捷键:Shift+ Cmd+K
根据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. } } }
因此,请确保PrimeNumberModel具有测试目标的目标.或High6导入整个模块的解决方案将起作用
它在文档中说Swift中没有import语句.
只需使用:
let primNumber = PrimeNumberModel()