2014-10-20 3 views
1

저는 많은 질문과 답변을 통해 많은 질문을 던지면서 많은 사람들이 몰려 들었습니다.Xcode 6 테스트 대상 문제

이제 프로젝트 코드의 상태가 만족스러워서 단위 테스트를 구현하려고했습니다. 그래서 테스트 대상을 추가했습니다. 올바르게 컴파일 할 수 있습니까? 아니 .... 나는 그것이 단순한 것이라고 확신하지만, 그것을 해결할 수는 없다.

프로젝트에는 2 개의 타사 개인 프레임 워크가 포함되어 있습니다.

내 테스트 대상 번들 로더 매개 변수로 설정

:

내 테스트 대상 테스트 호스트 매개 변수가 설정되어
$(TEST_HOST) 

: 내가 컴파일 할 때

$(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App 

, 나는 다음과 같은 오류를 얻을 :

Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_MyArrayController", referenced from: 
     objc-class-ref in SMyAppLogicTests.o 

나는이를보고,에 같은 답을 찾을 : XCTestCase: ld: symbol(s) not found for architecture x86_64

기본적으로 내 테스트 대상에 클래스를 추가해야한다고 말합니다. 이것은 일하는 앱 위에 포인트 건물을 짓밟는 것 같지만, 어떨까요. 그래서 모든 .m 파일을 테스트 대상에 추가하면 컴파일됩니다! 만, 새로운 문제가 생겼어.

그렇다면 내 응용 프로그램에 이미 포함되어있는 m 파일을 넣어야하는 이유는 무엇입니까? 그래서 나는 그것을보고, 첫 번째 위치에 날 다시두고 답변 수 :

Class Foo is implemented in both MyApp and MyAppTestCase. One of the two will be used. Which one is undefined

내가 무엇을 놓치고를? 나는 일주일 동안 xcode에서 테스트를 구현하려고 노력했습니다. (xcode 서버가 내 서버에 어떤 작업을했는지는 말할 것도없고, 여전히 그것을 알아야합니다.) 테스트를 작성한 3-4 일을 어리석게 생각할 때 계획했습니다. 빠른 설정이 될 것입니다.

편집 : 테스트 대상을 삭제하고 다시 시작했습니다. 우선 작동하지 않는 것은 제 3 부 사설 프레임 워크를 찾을 수 없다는 것입니다. 그래서 $ (PROJECT_DIR)을 프레임 워크 검색 경로에 추가했습니다.

다음으로 클래스에 대한 Undefined Symbols 아키텍처 오류가 다시 나타납니다. 내 Bundle Loader가 설정되지 않았 음을 알았 기 때문에 $ (TEST_HOST)로 설정했습니다. 이제 테스트가 실행됩니다! 만세.

이제 실행 액션을 빌드 할 수는 없지만 테스트 작업을 빌드하면 ..... 진행 상황을 추측 할 수 있습니다. x86_64 아키텍처의 정의되지 않은 기호가 나타납니다. 다시 오류가 발생합니다.

나는 스키마를 편집하고 빌드에서 테스트 대상에 대해 "실행"을 선택 취소하여 문제를 해결할 수있었습니다. 나는 계획이 어떻게 작동해야 하는지를 완전히 이해하고 있는지 확신하지 못한다. 그러나 그것은 트릭을했다.

답변

1

XCTesting 건배는 런타임에 테스트 번들을 앱에 주입하여 작동합니다. 새로운 테스트 타겟을 추가 할 때 Xcode가 모든 것을 설정합니다. 슬픔을주는 테스트 타겟이 있고 Xcode에서 새 타겟을 만들고 그 테스트 케이스를 목표.

  1. 이 테스트 어떤 테스트 대상에 결코에만 응용 프로그램 대상에 클래스 구현 파일을 추가하지 : 그런 다음 당신은 단지 세 가지 규칙을 따라야합니다. 이렇게하면 "클래스 Foo는 MyApp와 MyAppTestCase에서 모두 구현되지만 둘 중 하나는 사용되지 않습니다"가 경고가됩니다. 경고
  2. 대상을 테스트하는 데 XCTestCase 파일을 추가하십시오.
  3. 테스트 케이스에서 사용하는 각 사용자 정의 클래스의 헤더 파일을 '#import'합니다.