2012-02-18 2 views
1

아무 것도 반환하지 않는 메서드를 테스트하려고합니다. 방법은 매개 변수가 불법 값이 포함되어 있지 않음을 주장하는 것으로 시작 :종료하지 않고 ObjC에서 캐치 실패 NSParameterAssert

- (void) someMethod:(NSString*)param { 
    NSParamaterAssert(param != @"0"); 
    // more code 
} 

내 테스트 코드에서 나는 불법 값이 잡힌 있는지 확인하려면,하지만 내가 테스트 중에 종료 프로그램을 싶지 않아요. 파이썬에서 나는 시도 할 수 있습니다 : 예외 : 그것을 잡으려고. Objective C에 상응하는 것이 있습니까? 여기에 어설 션을 잘못 사용하고 있습니까?

답변

2

당신은 "예외"를 혼합하고 자신은 주장에 " 처리". 어설 션에 대한 자세한 정보는 here, "예외 처리"는 위키 백과에 있지만 유감스럽게도 2 개의 링크 만 게시 할 수 있습니다.

어설 일반적으로 (보통 심각한) 오류에서 방법/프로그램을 보존 (특별한 경우 잘못된 기능 동작 등) 할 수있는 방법 로 사용되지 않습니다. 어설 션은 예를 들어 프로그램 검증에 사용됩니다.

예외 처리 (예 : 잘못된 매개 변수)이 필요합니다. 그렇게하기위한 좋은 출발점은 here (ObjC에만 해당)입니다.

+0

감사합니다. NSException과 "@try @catch @finally"의 조합은 작업을 멋지게 처리합니다. –

0

는 목표 - C에서 NSAssertion는 당신 때문이 아니라 잘못된 인수 또는 예기치 않은 조건, 코드에서 실수를했기 때문에 단지 실패 할 경우 하나의 코드 주장에 만든 더블 체크 가정에 사용됩니다.

NSException이 유효 인자 같은 것들을 사용 등 때문에 더 잘 맞는 당신이 무슨 말을하는지에 대한 것입니다 (하지만 테스트의 외부는 @catchNSException 표준 방법이 아닙니다 그리고 실행을 계속한다 : 당신은 그냥 할 대신 것 종료 전에 오류보고).

상황에 따라 NSException을 사용하는 방법은 다음과 같습니다. 다음과 같이 첫째, someMethod:을 변경

- (void) someMethod:(NSString*)param { 
    if (param == @"0") { 
     [NSException raise:@"Invalid param value" format:@"param of 0 is invalid"]; 
    } 
    // more code 
} 

을 그런 다음 호출 할 때 귀하의 의견, 나는 당신이 @catch 블록에 플래그의 어떤 종류를 설정할 것 같아요과 경우를 기반으로 someMethod:

@try { 
    [yourObject someMethod:@"0"]; 
} 
@catch (NSException *exception) { 
    NSLog(@"main: Caught %@: %@", [exception name], [exception reason]); 
} 
@finally { 
    //any code that should be executed whether or not the exception is raised 
} 

플래그가 설정되지 않은 경우 (즉, 예외가 발생하지 않은 경우) 종료됩니다.

P. 정규 프로그램 실행 (테스팅과 반대) 중에 오류에 반응하기를 원할 때, NSError은 더 관용적입니다.

+0

NSError를 사용하는 방법을 보여주는 예제가 좋지만 @Jurlie는 메서드에 매개 변수를 추가하고 싶지 않습니다. 단지 코딩을하지 않고 작동하는지 외부에서 확인하려고합니다. 나는 NSException이 더 적절하다고 생각한다. –

+0

아마 내가 내 질문에 명확하게하지 않았지만 메서드에 잘못된 매개 변수가 전달되면 프로그램을 종료하고 싶습니다. 그런 다음 테스트 코드에서 매개 변수 검사를 확인하고 조작 된 매개 변수를 통해 허용 된 경우에만 종료합니다. –

+0

내 질문에 대한 오해. 업데이트 된 답변보기 – yuji

관련 문제