스냅샷 테스트란 특정 상태에서의 화면을 그려 이미지로 저장해놓고
테스트를 돌릴 때마다 다시 특정 상태에서의 화면을 그려 이미지로 만든 후
기존에 저장된 이미지와 픽셀 비교를 하여 달라진 부분이 있는지를 확인하는 테스트 기법입니다.
스냅샷 테스트를 적용하면 손쉽게 UI에 대한 테스트를 해볼 수 있습니다.
스냅샷 테스트 라이브러리
스냅샷 테스트 라이브러리는 크게 두 가지가 있습니다.
우버의 iOSSnapshotTestCase와 포인트프리의 SwiftSnapshotTesting 입니다.
우버 라이브러리는 페이스북에서 만든 FBSnapshotTestCase의 명맥을 유지하면서 이어져오는 라이브러리이기도 합니다.
둘다 쓰임새와 사용법은 비슷합니다만
SwiftSnapshotTesting은 뷰뿐만 아니라 다른 것들도 스냅샷 테스팅이 가능하여
더 유용하게 사용될 수 있을 것 같습니다.
SwiftSnapshotTesting
SwiftSnapshotTesting을 통해서 스냅샷 테스트를 하는 방법은 간단합니다.
assertSnapshot(matching value:, as snapshotting:)
함수를 사용해 스냅샷 테스트를 돌리고isRecording = true
를 통해 스냅샷 레퍼런스(원본) 이미지를 업데이트할 수 있습니다.
assertSnapshot
에 대한 사용법은 공식문서와 Snapshotting 코드를 보시면 자세히 알 수 있습니다.
Precision은 어떻게 잡아야 하는가?
precision은 기본 값이 1, 즉, 100% 일치하는 것으로 설정되어 있습니다.
테스트가 완전하게 일치하면 좋겠지만 이렇게 하기에는 쉽지 않습니다.
스냅샷이 환경이 조금만 달라도 결과가 조금씩 바뀌는 부분이 생길 수 있기 때문입니다.
다른 팀원이 테스트를 돌릴 때, CI에서 테스트를 돌릴 때와 같이 환경이 달라지면 이미지가 다르게 나와
테스트가 실패하는 경우가 자주 발생합니다.
대표적으로 달라지는 것들에는 shadow, corner radius, gradient등 이 있습니다.
이를 해결하기 위해서는 precision 값을 조금 낮추거나
method swizzling등의 방법으로 어떻게든 결과를 같게 맞춰야 합니다.
이러한 부분은 팀원들과 합의해서 적절한 방법을 사용하면 될 것 같습니다.
정리
스냅샷 테스트는 간단하면서 효과적으로 뷰를 테스트할 수 있는 방법입니다.
다만 컴퓨터 환경에 따라 스냅샷 결과가 다를 수 있기 때문에
협업과 CI에서 조금 신경쓸 부분이 있습니다.
그렇다 하더라도 충분히 쉽고 매력적인 테스트 입니다.
'Tech' 카테고리의 다른 글
Swift Dependencies (0) | 2023.08.26 |
---|---|
StoreKit 기초 (0) | 2023.08.26 |
alignmentGuide 활용하기 (0) | 2023.08.26 |
코드 리뷰를 잘하는 법 (0) | 2023.08.26 |
Skeletonview 적용하기 (0) | 2023.08.26 |