반응형
do-try-catch 유닛테스트 하기 위한 코드
- error enum
- try
- do-try-catch
- 테스트코드 : 정상 확인 코드
- 테스트코드 : 오류 확인 코드
error enum
- Error Protocol 을 상속받아 에러 케이스를 정의합니다.
enum JsonError : Error {
case unSupportedArrayPattern
case unSupportedObjectPattern
}
try 코드
- 일반 함수와 동일하지만 -> Bool or -> Int 같은 형식이 아닌 throws 만 정의해줍니다.
- 또한, guard를 이용하여 위에서 정의한 enum 케이스 중 하나를 throw 에 담아줍니다.
public static func isValidate(to inputValue:String) throws {
if inputValue.isArray() {
guard inputValue.supportedArrayTypes() else {
throw JsonError.unSupportedArrayPattern
}
}
if inputValue.isObject() {
guard inputValue.supportedObjectTypes() else {
throw JsonError.unSupportedObjectPattern
}
}
}
do-try-catch 코드
- do-try-catch 구문을 이용해 위에서 정의한 func를 try 에 정의
- 해당 코드 중에 에러가 발생할 경우를 catch 에 정의
- 마지막 catch 에는 default 로 enum 코드에 정의하지 않은 에러가 발생할 경우를 대비해 정의
func someFunc() -> Bool {
do {
try GrammarChecker.isValidate(to: input)
} catch JsonError.unSupportedArrayPattern {
return JsonError.unSupportedArrayPattern.isError()
} catch JsonError.unSupportedObjectPattern {
return JsonError.unSupportedObjectPattern.isError()
} catch {
// 해당 부분은 Default 형식으로 추가해주도록 체크되고 있습니다.
print("판단되지 않은 에러발생")
return true
}
}
테스트코드 : 정상 확인 코드
- 정상적인 결과를 원하는 코드의 경우에는
XCTAssertNoThrow
함수를 이용해 테스트를 실행합니다.
func testPass(){
let input = "{\"name\":\"[oingbong{}}{{}}\"}"
XCTAssertNoThrow(try GrammarChecker.isValidate(to: input))
}
테스트코드 : 오류 확인 코드
- 에러가 나는 경우의 결과를 원하는 경우에는
XCTAssertThrowsError
&XCTAssertEqual
함수 사용- XCTAssertThrowsError : 실행 할 코드와 값을 입력합니다.
- XCTAssertEqual : enum 에서 정의한 에러와 입력한 코드와 값이 동일한 에러인지 확인합니다.
func testFail(){
let input = "[{{,}}]"
XCTAssertThrowsError(try GrammarChecker.isValidate(to: input)) { error in
XCTAssertEqual(error as? JsonError, JsonError.unSupportedArrayPattern)
}
}
참고
반응형
'Swift' 카테고리의 다른 글
Switch 사용하면서 값이 배열 안에 있는지 확인하는 방법 (0) | 2018.11.03 |
---|---|
여러 타입을 저장하기 위한 enum 만들기 (0) | 2018.11.02 |
인증서 p12 -> pem 변환 방법 (바이두 - 푸시서비스에 사용) (0) | 2018.11.02 |
iOS 배포 이미지 준비 (0) | 2018.11.02 |
Swift one IBAction for multiple buttons (0) | 2018.11.02 |