2011-01-12 2 views
15

응용 프로그램 테스트 (장치에서)를 실행할 때 OCUnit 테스트 스위트에 문제가 있습니다. 때로는 OCUnit 클래스에서 발생하는 것처럼 보이는 까다로운 오류가 발생합니다. 필자는 테스트 스위트에 추가 된 파일을 살펴보고자했지만 내 머리를 감당할 수는 없습니다.장치에서 OCUnit 응용 프로그램 테스트 스위트를 실행할 때 가끔 오류가 발생했습니다.

나는 애플의 문서를 다음과 같은 목표 (및 들여 쓰기 의존성)의 결과로, 내 테스트 목표를 설정할 때 다른 튜토리얼을 검토 한 결과 :

의 MyApp에게

LogicTests LogicTests

을 ApplicationTests MyApp

MyAppTesting ApplicationTests

마지막 (MyAppTesting)은 테스트 스위트를 시작하기 위해 장치에서 실행 한 것입니다.

그리고 언급 한 바와 같이, 테스트가 콘솔에서 나에게 다음과 같은 출력을 던지는 때때로 시작되지

:

2010-11-17 12:02:48.537 VCCTesting[12018:307] *** Assertion failure in -[SenTestClassEnumerator init], /SourceCache/OCUnit/OCUnit-1685/SourceCode/SenTestingKit/SenTestClassEnumerator.m:137 

2010-11-17 12:02:48.556 VCCTesting[12018:307] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'objc_getClassList returned more classes than it should have.' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x30897ed3 __exceptionPreprocess + 114 
1 libobjc.A.dylib      0x3002f811 objc_exception_throw + 24 
2 CoreFoundation      0x30897d15 +[NSException raise:format:arguments:] + 68 
3 Foundation       0x349f932f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 62 
4 SenTestingKit      0x20107c29 -[SenTestClassEnumerator init] + 292 
5 SenTestingKit      0x201079fd +[SenTestClassEnumerator classEnumerator] + 24 
6 SenTestingKit      0x2010777d +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] + 92 
7 SenTestingKit      0x201067b5 +[SenTestSuite updateCache] + 28 
8 SenTestingKit      0x20106753 +[SenTestSuite suiteForBundleCache] + 54 
9 SenTestingKit      0x201065db +[SenTestSuite structuredTests] + 14 
10 SenTestingKit      0x201065a1 +[SenTestSuite allTests] + 40 
11 SenTestingKit      0x20106573 +[SenTestSuite defaultTestSuite] + 14 
12 SenTestingKit      0x201057a3 +[SenTestProbe specifiedTestSuite] + 106 
13 SenTestingKit      0x20105d83 +[SenTestProbe runTests:] + 94 
14 Foundation       0x349c7e8d __NSFireDelayedPerform + 368 
15 CoreFoundation      0x3084e7fb __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14 
16 CoreFoundation      0x3084e2ad __CFRunLoopDoTimer + 860 
17 CoreFoundation      0x3081f7a5 __CFRunLoopRun + 1088 
18 CoreFoundation      0x3081f277 CFRunLoopRunSpecific + 230 
19 CoreFoundation      0x3081f17f CFRunLoopRunInMode + 58 
20 GraphicsServices     0x31e445f3 GSEventRunModal + 114 
21 GraphicsServices     0x31e4469f GSEventRun + 62 
22 UIKit        0x31e51123 -[UIApplication _run] + 402 
23 UIKit        0x31e4f12f UIApplicationMain + 670 
24 VCCTesting       0x000234ff main + 70 
25 VCCTesting       0x00002538 start + 40 
) 
terminate called after throwing an instance of 'NSException' 

사람이 잘못 될 수 있는지 알고 있나요? 어떤 도움

, 감사합니다, Kristofer

P.S. 나는 이것을 App Dev forums에 올렸지 만, 아직 어떤 행운이 없었습니다. https://devforums.apple.com/message/333890

+0

그냥 어떻게 든 이걸 쳐. 나를 깨끗하게하고 다시 시도해보십시오. – canhazbits

답변

19

당신이 NSZombieEnabled가 있습니까 애플과 지원 문제점 ...

건배,

아담을 제기? 내가 가진이 문제를 내가 NSZombieEnabled를 내 단위 테스트 실행 목표에 대한 내 인수에서 YES로 설정했을 때 모든 것을 시도했습니다 (XCode/res의 정리/종료). 시뮬레이터 컨텐츠). 유닛 테스트 시작시 좀비를 비활성화하는 유일한 방법은

+0

NSZombieEnabled를 비활성화하면 저에게 효과적입니다! 알렉스! –

+0

예, 저 역시 저를 위해 일했습니다 – Antoni

+0

나를 위해 일했습니다. –

0

나는이 오류가 발생하는 이유를 알아 냈습니다. 아마도 같은 것이 될 것입니다. 당신에게 일어나는 일 :

나는 내부 베타 테스트 (환경 설정 패널과 함께 완료)와 앱 스토어 릴리스를위한 두 가지 제품을 설정했습니다. 두 제품 목표는 동일한 제품 이름 (빌드 설정에서 PRODUCT_NAME)으로 설정되었습니다.

이것은 XCode 3.x에서 잘 작동했지만 XCode 4는 베타 제품을 만들 때마다 상점 제품을 만들려고 시도했습니다. Xcode가 파생 된 파일을 저장하는 위치가 변경된 것 같습니다. Xcode 4는 베타 및 저장 제품을 동일한 경로에 저장하므로 베타 제품을 빌드 할 때 저장소 출력 파일이 변경되어 다시 빌드해야했습니다. ..

어쨌든 ... 베타 제품 이름 을 변경하면 고정했다 일시적으로 고정 두 제품은 서로 다른 식별자를 그래서 ... 나는 또한의 Info.plist에 번들 식별자를 변경 한 문제. 이제는 하나의 제품을 만들 때 다른 하나는 동시에 빌드되지 않지만 테스트가 실행될 때 충돌은 계속 발생합니다 .- (

내 생각은 이제 완전히 새로운 것으로부터 프로젝트를 완전히 다시 만드는 것입니다. 엑스 코드 4는 다른 무언가를하는 경우 설정과 파일을 통해 볼 수 있습니다. 그와

+0

답장을 보내 주셔서 감사합니다, 아담! 불행히도, 그건 내 문제를 해결하지 못했습니다. 목표물마다 제품 이름이 다릅니다 ... 또한 Xcode 3.2.4부터 동일한 문제가 있었으므로 Xcode 4 릴리스와 관련이 있다고 생각하지 않습니다. : –

+2

아아아, 내가 너무 빨리 말했어. 나는 여전히 오류를 얻고있다. 때때로 두 목표를 따로 닦은 다음 단위 테스트를 처음부터 만들고 실행하지만 가끔은 그렇지 않다. 애플과 함께 지원 사건을 제기하면, 우리는 그것이 어디 있는지 보게됩니다! – adamcohenrose

+1

하하! 지원 사건을 제기했지만 버그를 제기하라는 말을 들었습니다. 잠시 시간이 지나면 그것을 할 것입니다. 그동안, 모든 타겟을 클리닝한다는 것은 종종 테스트가 충돌하지 않고 원하는 타겟을 실행할 수 있다는 것을 의미합니다. – adamcohenrose

0

아직 100 % 확신 할 수는 없지만 각 테스트 대상마다 다른 구성표를 만들어 해결할 수 있습니다. 오늘 오후에이 오류가 많이 발생했지만 다른 테스트 대상에 대해 별도의 스키마를 만든 후에 잠시 동안은 이런 일이 발생하지 않았습니다. 그냥 내가처럼이 문제로 실행할 수있는 사람을위한

0

가 있습니다

KIFTester는에
어설 션 실패를로드 - [SenTestClassEnumerator 초기화], /SourceCache/OCUnit/OCUnit-5315/SourceCode/SenTestingKit/SenTestClassEnumerator.m : 136
'NSInternalInconsistencyException'이라는 캐치되지 않은 예외로 인해 앱이 종료됩니다. 이유 : 'objc_getClassList가 보유해야하는 것보다 많은 클래스를 반환했습니다.'

문제는 Google 웹 3.0 가 3.0.3로 업데이트하지만 여전히 이러한 라이브러리 중 하나와 같은 문제 libGoogleAnalytics_debug.a libGoogleAnalyticsServices.a

가 난 그냥 포함되지 않습니다 주위 이동하려면 밝혀졌다 테스트를 위해.

관련 문제