테스트와 같은 다른 파일의 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'"
}
두 빠른 파일은 모두 같은 디렉토리에 있습니다.
답변
내 XCTestCase
파일 에서도 같은 문제가 있었지만 일반 프로젝트 파일에는 없었습니다.
를 제거하려면 :
확인되지 않은 식별자 ‘PrimeNumberModel’사용
import
테스트 파일의 기본 모듈이 필요했습니다 . 내 경우에는 내 목표 를 ‘myproject’라고 import myproject
하고 클래스를 추가했습니다 .
답변
Swift 2.x, 3.x, 4.x 및 5.x 업데이트
이제 public
테스트 할 메소드에 를 추가 할 필요가 없습니다 . 최신 버전의 Swift에서는 @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
.
스위프트 1.x
Swift에는 두 가지 관련 개념이 있습니다 (Xcode 6 베타 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() {
}
}
답변
답변
테스트 대상에서 PrimeNumberModel.swift의 대상 멤버십을 확인하십시오.
답변
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()
}
보시다시피 가져 오기가 필요하지 않았습니다. 도움이 되었기를 바랍니다.
답변
Apple에 따르면 동일한 대상에서 빠른 파일을 가져 오기 할 필요가 없습니다. 나는 신속한 목표 파일을 일반 대상과 테스트 대상 모두에 추가하여 마침내 작동하게했습니다. 그런 다음 테스트에 브리징 헤더를 사용하여 일반 브리징 헤더에서 참조한 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 솔루션이 작동합니다.
답변
빌드를 정리하여이 문제를 해결할 수있었습니다.
톱 메뉴-> 제품-> 청소 또는 키보드 단축키 : Shift+ Cmd+K