2010-07-06 4 views
3

Xcode 3.2.3을 사용하여 iPhone 응용 프로그램에 대한 단위 테스트를 설정하려고합니다. UnitTestBundle 대상에서 AppDelegate를 찾지 못하는 SenTestingKit

나는 같이 밀접하게 내가 할 수있는 등

http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html의 단계를 따라,하지만 난 구축을 위해 노력에이 오류 메시지가 점점 오전 : 는 "(! (yourApplicationDelegate는) = 무기 호)"진정한해야합니다. UIApplication이 문서에 기술 된 제품, 그리고이 오류가 될 때 나는 내 응용 프로그램 테스트 대상 건물입니다

AppDelegate에

(이용 신청 단위 테스트에 대해이되는 기본 사소한 테스트를 사실이다) 찾지 못했습니다.

내 테스트가 아닌 모든 테스트 소스가 테스트 번들에 있는지 확인해야합니까?

"((yourApplicationDelegate) != nil)" should be true. UIApplication failed to find the AppDelegate

원래 코드 : 내 프로젝트에 소스 파일을 포함

하고 그것을 잘 컴파일,하지만 여전히 같은 단위 테스트 오류를 ​​앓고 -

혼란 템플릿 코드와 같습니다.

-(void) testAppDelegate { 

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate]; 
    STAssertNotNil(yourApplicationDelegate, @"UIApplication failed to find the AppDelegate"); 
} 
+1

예, 응용 프로그램 원본은 테스트 대상의 컴파일 소스 빌드 단계에 포함되어야합니다. 단위 테스트 코드와 실제 오류를 게시 할 수 있습니까? –

+0

@chrispix - 질문, 새로운 클래스를 만들 때마다 코드를 명시 적으로 추가 할 필요없이 모든 코드를 테스트 대상에 자동으로 스윕 할 수있는 방법이 있습니까? – groundhog

+1

테스트 대상에 "자동으로"스윕하는 방법을 모르겠습니다. 그러나 XCode를 사용하여 새 클래스를 만들면 대화 상자는 어떤 대상에 추가할지 묻고 이전에 선택한 대상을 기본값으로 사용합니다. 내 경험에 따르면, 내가 추가 한 모든 클래스가 테스트 대상에 추가됩니다. 테스트 클래스이거나 앱의 클래스이며 어떤 방식 으로든 테스트됩니다. 따라서 테스트 대상은 항상 해당 대화 상자에서 확인됩니다. 문제는 실제로 반대입니다. 애플리케이션 클래스에 테스트 클래스를 포함하지 않는 것을 기억하십시오. –

답변

0

OCUnit에서 작동하는 응용 프로그램 테스트가 없었기 때문에 직접 질문에 대답 할 수 없습니다. 많은 사람들이 Mac iPhone 기기 테스트 라이브러리 또는 GHUnit 용 Google 툴박스를 사용하여이 작업을보다 쉽게 ​​처리 할 수 ​​있음을 알고 있습니다.

위에 링크 된 Blazing Cloud 포스트가 지적했듯이, OCUnit (및 GTM/GHUnit)은 Rspec 스타일보다 더 JUnit 스타일입니다. Pivotal에서 Rspec을 거의 모든 용도로 사용하고 Objective C와 비슷한 것을 원했습니다. 따라서 Cedar을 작성했으며 UIKit에서 작동하도록 의도적으로 설계했으며 iOS 장치에서 실행하는 등 자유롭게 사용할 수 있습니다. 그것에 대해 질문이 있으시면 토론 그룹 ([email protected])으로 이메일을 보내주십시오.

0

Apple 설명서에 따르면 2 가지 단위 테스트가 있습니다.

  • 로직
  • 애플리케이션 테스트

애플리케이션 테스트 전용 하드웨어 장치에서 작업을 테스트한다. 시뮬레이터를 사용 중이라면 시뮬레이터가 작동하지 않습니다.

이 참조 : http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html

+2

메이트, 사과 문서에서 정확히 복사하여 붙여 넣습니다. _ "응용 프로그램 테스트 **는 시뮬레이터 및 장치 **에서 실행될 수 있으므로이 테스트를 사용하여 하드웨어 테스트를 수행 할 수도 있습니다 (예 : 따라서 응용 프로그램 테스트는 장치뿐만 아니라 시뮬레이터에서도 작동합니다. –

1

이 문제가 지속 경우, OP위한 것이며, 아직 관련, 그리고 포럼 브라우저 :

내가 너무, 아이폰 OS 개발에 gudielines을 따라 유닛 및 애플리케이션 테스트 가이드. 응용 프로그램 테스트 가이드를 다음과 같은 경우 나도, 따라 문제를 가지고 :

Test Suite 'FirstSuite' started at 2010-12-08 21:30:33 GMT 0000 
Test Case '-[FirstSuite testAppDelegate]' started. 
/Users/TomCruise/Documents/iPhoneDevelopment/PickerLeak/FirstSuite.m:22: error:-[FirstSuite testAppDelegate] : "((app_delegate) != nil)" should be true. Cannot find the application delegate. 
Test Case '-[FirstSuite testAppDelegate]' failed (0.000 seconds). 

예상대로 즉, 응용 프로그램 대리인이 찾을 수 없습니다.

내가 가이드 라인을 따랐다 고 생각할 때 나는 그렇게하지 않았다. 애플리케이션 테스트는 Device에서만 실행됩니다. 그래서 시뮬레이터에서 장치 (AppTesting 대상)로 전환하고 iPhone을 연결 한 다음 Build + Run (cmd + return/enter)을 수행했습니다. 응용 프로그램 자체가 설치되고 몇 초 후에 리턴 코드 1이 나옵니다 (이는 잘못된 리턴 코드를 나타냄). 응용 프로그램 후

종료했다, 나는 교대 + cmd를 + R, (UPARROW + cmd를 + R) 로그 프롬프트를 얻을 수는했고, 다음 읽을 수 : 그래서

2010-12-08 22:59:59.163 PickerLeak[5356:307] -[UIPickerView setFrame:]: invalid height value 200.0 pinned to 180.0 
Test Suite 'All tests' started at 2010-12-08 22:00:00 GMT 0000 
Test Suite '/var/mobile/Applications/{number}/PickerLeak.app/PickerLeakTests.octest(Tests)' started at 2010-12-08 22:00:00 GMT 0000 
Test Suite 'FirstSuite' started at 2010-12-08 22:00:00 GMT 0000 
**Test Case '-[FirstSuite testAppDelegate]' started. 
Test Case '-[FirstSuite testAppDelegate]' passed (0.001 seconds).** 
Test Case '-[FirstSuite testFail]' started. 
/Users/TomCruise/Documents/iPhoneDevelopment/PickerLeak/FirstSuite.m:17: error: -[FirstSuite testFail] : Must... fail. 
Test Case '-[FirstSuite testFail]' failed (0.003 seconds). 
Test Suite 'FirstSuite' finished at 2010-12-08 22:00:00 GMT 0000. 
Executed 2 tests, with 1 failure (0 unexpected) in 0.004 (0.008) seconds 

... 만세! :)

Godspeed, 개발자.

10

단위 테스트 번들의 BUNDLE_LOADER 및 TEST_HOST 빌드 설정이 지정되어 있는지 확인하십시오.

BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/YourApp.app/YourApp 
TEST_HOST = $(BUNDLE_LOADER) 

또한 Xcode4에서, 애플의 설명서에 기재된 단계들의 대부분은 (예컨대 앱 대상을 복제) 필요하지 않다. 단위 테스트를 포함하여 새로운 프로젝트를 생성하고 둘러 볼 것을 권장합니다.

+0

오후 2시 동안 모든 것을 시도한 후 드디어 시도했습니다. 정말 고마워! –

+0

감사합니다. 또한 주 대상을 유닛 테스트 번들 (대상 설정 -> 빌드 단계)의 "대상 종속성"으로 추가해야했습니다. –

1

나는 이것에 두 번 빠졌습니다. BUNDLE_LOADER 및 TEST_HOST를 설정하여 작동하도록 설정해야합니다. 하지만 충분하지 않습니다. 번들 로더와 테스트 호스트도 설정해야합니다. how to implement application tests in xcode4?을 확인하십시오. 그 답변은 저를 위해 완벽하게 잘 작동합니다.

관련 문제