- 테스트가 실패했을 때
- 무슨 실패지?
- 어떻게 실패했지?
- 왜 실패했지?
- 어디서 실패했지?
- Swift errors in tests
- swift code에서 에러를 던지면 이걸 보여준다. → 이제 catch해서 XCTFail을 호출할 필요가 없다.
- 테스트 리포트에서 에러가 던져진 위치를 바로 확인할 수 있다. → Swift 런타임의 발전으로 iOS 13.4부터 가능해졌다.
- setup과 tearDown에도 에러 버전이 추가 되었다.
- setupWithError는 원래 setup 이전에, tearDownWithError는 원래 tearDown 이후에 호출된다.
- rich failure objects
- XCTest가 기록하는 값은 크게 4가지다
- failure message
- file path
- line number
- expected 플래그: 실패가 의도된 것이였는지
- 이 정보들은 XCTAssert메소드를 통해서 recordFailure 메소드를 간접적으로 호출함으로써 기록된다.
- 이제 이 정보들이 XCTIssue라는 이름으로 캡슐화된다. → 기존 메소드는 deprecated되었다.
- 추가 데이터
- 개별 타입
- 자세한 디스크립션
- 연관된 에러
- 첨부데이터(XCTAttachment)
- Swift에서는 Struct고, Obj-C에서는 immutable 버전과 mutable 버전이 존재한다.
- failure call stacks
- 기존에는 파일인자와 함수 인자를 명시적으로 하위 메소드로 넘기면서 테스트해야 했다.
- 이제는 XCTIssue에 심볼릭화된 콜스택 정보가 들어가 있기 때문에 이런 작업을 자동으로 해준다.
// 커스텀 단정문 만드는 법
func assertSomething(about data: Data,
file: StaticString = #filePath,
line: UInt = #line) {
if !isValid(data) {
var issue = XCTIssue(type: .assertionFailure, compactDescription: "Invalid data")
issue.add(XCTAttachment(data: data))
let location = XCTSourceCodeLocation(filePath: file, lineNumber: line)
issue.sourceCodeContext = XCTSourceCodeContext(location: location)
self.record(issue)
}
}
- advanced workflow
- 원하면 record 메소드를 오버라이드 해서 추가 동작을 수행할 수 있다.
- 이때 super 호출을 잊으면 안된다.