XCTest의 기본 모듈을로드 할 수 없습니다


180

Xcode에서 신속하게 작업하고 있으며 기본적으로 XCTest를 참조하는 테스트 파일을 만듭니다.

대상 멤버십을 기본 프로젝트로 설정하면이 오류가 발생합니다

XCTest의 기본 모듈을로드 할 수 없습니다

이 대상 멤버십을 설정하지 않으면 테스트가 제대로 실행되고 모든 것이 제대로 작동합니다.

추신 : 나는 새롭지 않고 어리석은 질문 일 것입니다.


17
멍청한 질문 메뚜기는없고 멍청한 질문자 만 있습니다. ;-) 이것을 읽는 모든 사람이 같은 문제를 겪을 것이므로 큰 질문입니다.
랜스 종류

답변:


168

기본 프로젝트는 XCUnit 프레임 워크와 연결되지 않습니다. 프로젝트에 대해 별도의 테스트 대상을 작성하고 (아직없는 경우) 테스트 소스 파일을 해당 대상에 추가해야합니다.

  1. 프로젝트 네비게이터에서 프로젝트를 선택하십시오. 편집기에서 프로젝트 설정이 열립니다.
  2. 타겟이 나열된 열 하단의 "+"버튼을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

  1. iOS 프로젝트 템플릿으로 작업하는 경우을 선택 iOS > Test > iOS Unit Testing Bundle합니다.

    OS X 프로젝트 템플릿 에서 작업중인 경우을 선택 OS X > Test > OS X Unit Testing Bundle합니다.


3
한편 iOS의 경우 iOS UITesting 번들 (UI 테스트에 사용) 또는 iOS 단위 테스트 번들 (단위 테스트 용)입니다.
kuzdu

184

문제의 파일이 기본 대상이 아니라 테스트 대상에만 있는지 다시 확인하십시오. 테스트 대상 만 해당 프레임 워크를 가져옵니다.


16
도움이된다면. '비 테스트'대상-> 빌드 단계-> 컴파일 소스를 선택하십시오. "ClassTest.swift"가 일반 빌드 대상에 없는지 확인하십시오.
Nick N

기본 번들과 테스트 번들에있는 경우 기본 번들에서이를 제거하는 방법.
제임스 로빈슨

1
감사합니다 @ NickN, 당신은 내가 겪고있는 정확한 문제를 지적했으며 지금은 해결되었습니다!
Naishta 2016 년

테스트 대상에 있으면 주 대상의 주요 테스트 방법에 액세스 할 수없는 것 같습니다.
UKDataGeek

그것은 매력처럼 작동했습니다. 테스트 파일을 제거하면 효과가 있습니다.
Ccr

32

테스트 파일 / 클래스를 실수로 테스트 대상이 아닌 기본 대상에 추가했습니다. 그렇게 간단합니다.

해결책:

1) 주요 대상에 대한 "빌드 단계"탭의 "컴파일 소스"목록에서 테스트 파일을 제거하십시오.

2) 테스트 대상의 "빌드 단계"탭에서 "컴파일 소스"에 동일한 파일 추가

문제를 해결해야합니다


15

macOS 동적 프레임 워크 대상을 만들면이 오류가 발생합니다 XCTest.framework( 링크 는 테스트 대상이 아닌 프레임 워크 대상입니다).

이 경우 문제는 다음을 추가하여 해결됩니다.

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

프로젝트의 "빌드 설정 / 프레임 워크 검색 경로"에


완전한! 감사!
랜스 종류

9
더 나은 : $(PLATFORM_DIR)/Developer/Library/Frameworks다른 이름으로 여러 버전의 Xcode가 설치된 경우 (예 : 릴리스 및 베타 버전).
rob mayoff

@robmayoff 감사합니다 이것은 올바른 해결책이었습니다 ;-)
Oliver Pearmain

이것은 지원 테스트를위한 프레임 워크를 구축 할 때 정답입니다.
다니엘 우드

7

이 페이지와 같은 스택 오버플로 페이지에서 많은 문제 해결 및 수신 거부 후 다른 iOS 단위 테스트 문제 해결 페이지에서 언급되지 않은 세부 정보를 찾을 수있었습니다.

프로젝트에서 CocoaPods를 사용하는 경우 기본 애플리케이션의 대상 내에 중첩 된 테스트 대상을 포함해야합니다. 실행 테스트 대상을 생성 한 경우 podfile에 포함되지 않을 수 있습니다 pod init. Podfile은 다음과 같아야합니다.

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

Podfile을 저장 pod install한 후 실행하십시오 .

그것이 도움이되기를 바랍니다!


5

이것은 약간 늦었지만해야 할 일은 다음과 같습니다.

File> New> Target> iOS Unit Testing Bundle을 클릭하십시오.

그리고 거기에 테스트를 추가하십시오. 이것은 나를 위해 일했습니다. 문제는 프로젝트를 만들 때 단위 테스트 생성을 선택하지 않았다는 것입니다. 이것이 누군가를 돕기를 바랍니다.


2

이 문제는 프로젝트에서 두 번 발생합니다.

  1. 새 프로젝트를 만들 때 프로젝트에 UnitTestingBundle을 추가하지 않은 경우
  2. 때때로 CocoaPods를 프로젝트에 설치할 때

1 : 답변 :

  • 파일로 이동 파일을 클릭하십시오.

  • 그런 다음 첫 번째 옵션 새로 작성을 클릭하십시오.

  • 그것을 클릭하면 대상에 대한 일부 옵션 클릭이 표시됩니다.

  • 그런 다음 검색 창에서 IOS 단위 테스트 번들 검색 및 문제 추가가 해결됩니다.

  • 컴파일러가 이것을 추가 할 수있는 권한을 부여 할 수 없다면 아래에 주어진 두 번째 방법을 시도하십시오.

2. CocoaPod 문제에 답하십시오 :

  • 제품으로 이동 제품을 클릭하십시오.

  • 정리를 클릭하거나 cmd + k를 누르십시오.

  • 문제가 해결되었습니다.


2

허용되는 답변은 대부분이 문제를 해결하지만이 오류를 해결할 수있는 방법이 하나 더 있습니다.

이미 확인한 경우 :

@pwc @ nick-n과 다른 사람들이 지적했듯이

  1. ClassTest.swift이되도록 보장함으로써 대상 멤버십 파일 테스팅 대상에 부착.
  2. ClassTest.swift것입니다 하지 당신의 주요 응용 프로그램 대상> 빌드 소스> 컴파일 소스에서 볼 수

확인할 수있는 다른 사항은 다음과 같습니다.

당신의 .podspecs파일에

source_files테스트 디렉토리를 직접 또는 간접적으로 포함하지 않는지 확인하십시오 .

예를 들면 다음과 같습니다.

s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

Classes/**/*.{swift}디렉토리가 있다는 사실 오버라이드 (override) 모든 것을 포함하고 MyPodProjTests제외해야합니다.

해결책:

s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]

참고 : 이것은 극단적 인 경우이며 완전히 인간의 실수이지만 지적 할 가치가 있다고 생각했습니다.


훌륭한 발언, 나는 내 모든 것을 포함시켰다 s.source_files. 감사!
Mauricio Chirino

1

테스트 프레임 워크를 선택할 때 모든 모듈에 대해 대상 멤버십이 선택 해제되어 있는지 확인하십시오. View-> Utilities-> Show File Inspector를 선택하여 Target Membership 옵션을 볼 수 있습니다.


1

필자의 경우 개인 포드에 대한 테스트를 수행 했으므로 podspec에서 다음과 같습니다.

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

그러나 Podfile에서 테스트 사양을 가져 오는 것을 잊었습니다.

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end

0

위의 모든 작업을 수행했지만 여전히 테스트하려는 메소드에 액세스 할 수 없었습니다. 그러나 테스트 사례를 작성하기 전에 프로젝트를 한 번 빌드하면 테스트 방법을 사용할 수있었습니다. 시도해보고 문제가 해결되었는지 알려주십시오.


0

나는 같은 문제가 있었고 해결책은 다음과 같습니다.

  1. 내 계획을 선택하십시오
  2. 구성표 편집 ...
  3. 그런 다음 Scheme 구성 창이 열리면 "Test"라는 왼쪽 탭을 선택하여 여기로 리디렉션하십시오. 여기에 이미지 설명을 입력하십시오
  4. 당신이 볼 수 있듯이 내 UITests는 여기에 추가되지 않지만 프로젝트에 존재하므로 더하기 버튼을 누르고 UITests 대상을 다음과 같이 선택해야했습니다. 여기에 이미지 설명을 입력하십시오
  5. 그런 다음 "추가"버튼을 누르고 구성보기를 닫습니다
  6. 깨끗한 프로젝트로 끝내고 다시 시도하십시오.
  7. https://developer.apple.com/library/archive/qa/qa1954/_index.html 도 확인해야합니다.

이 답변이 도움이 되길 바랍니다.

추신 : 빌드 설정의 테스트 대상에서 마지막으로 생각한 것은 올바르게 구성되지 않은이 속성을 확인해야했습니다.

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

@Alfishe가 위에서 언급 한 것처럼 :

Compiler Sources아래 에서 테스트 파일을 제거해야합니다Build Phases

아래 그림과 같이


여기에 이미지 설명을 입력하십시오


1
그렇게하면 내가 아는 한 테스트를 실행할 수 없습니다
Juan Curti


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.