2010-04-11 1 views
5

아이폰의 유닛 테스트 프레임 워크를 사용하는 경우에 충돌 (이 전 나는 또한 단위 테스트를하고 있어요해서 내 코드에 내 NSAssert() 검사를 제거하지 않는 이유가 있다고 가정하자.)

내 유닛 테스트 코드에서, 호출 할 때 코드에서 NSAssert가 히트 (어설트)하는지 확인하고 싶다. 따라서 어설 션을 수행하는 코드를 호출 할 때 STAssertThrows() 매크로를 사용합니다.

문제는 : NSAssert가 예외를 throw한다는 문서에도 불구하고 단위 테스트 실행이 중지되어 응용 프로그램이 다운되었다는 오류 메시지가 표시됩니다.

이것은 시뮬레이터의 SDK 3.1.3과 동일합니다.

프레임 워크에 버그가 있습니까? 아니면이 작업을 더 잘 수행 할 수있는 방법이 있습니까? 즉, NSAssert에서 단위 테스트 매크로가 catch 할 수있는 적절한 예외가 발생합니다.

답변

1

너무 빠르게 쐈습니다.

문제가 다른 곳이라고 밝혀 :

NSOject의 서브 클래스 아니었다 발사 NSAssert를 포함하는 클래스입니다. 이것은 클래스 메소드 만 포함하고 인스턴스 메소드가 없기 때문에 지금까지는 괜찮 았습니다. 하지만 NSAssert가 히트 할 때, 그것은 앉아있는 코드의 클래스 이름을 얻고 싶어하고 그 메소드는 빠져있다. 이 클래스를 NSObject의 하위 클래스로 만들면 NSAssert는 실제로 STAssertThrows에서 테스트 할 수있는 예외를 throw합니다.

충돌 직전 단위 테스트 로그의 경고를 보면이 사실을 알았습니다. methodSignatureForSelector 및 doesNotRecognizeSelector를 찾을 수 없다는 경고 메시지가 표시됩니다. 이것들을 추가하고 찾고자하는 셀렉터를 인쇄 한 후에 (NSLog(@"sel:%s", aSelector);), "class"메소드를 찾고있는 것으로 나타났습니다. 그 때 무슨 일이 일어 났는지 깨달았습니다. 이 논쟁 질문이있는 동안

그래서, 나는 적어도이 설명은 아마도, 언젠가 누군가를 돕는 희망 :)

가 나도하지만,이 질문은 삭제 괜찮다.