XCTest
XCTest란?
Xcode 프로젝트에 대한 단위 테스트, 성능 테스트, UI 테스트 등을 만들고 실행하는 프레임워크
The pyramid model approach to testing helps to strike a balance between thoroughness, quality and execution speed.
WWDC에서 위 피라미드 모델을 참고하면 철저함, 품질 및 실행 속도 간의 균형을 맞추는 데 도움이 된다고 함
User interface - 사용자에게 가까운 영역. 뷰 단위
Integration - 통합 테스트
Unit - 코드의 양이 많아진다. 로직 단위
Test와 내 앱이 다른 타겟이기 때문에 @testable import MyApp 이 필요하다
🤔 그냥 import MyApp 만 하면 안되는 이유가 뭐지?
→ 접근제어자가 Internal 이 기본이기 때문에 다른 타겟에서 접근하려면 Public으로 변경해줘야함. 그럼 내가 내 앱에서 private으로 만들어뒀던 모든 코드를 풀어야한다!
→ @testable 키워드로 테스트할 때만 internal이어도 접근 가능하게 해줄게!!
✔️ setUpWithError, tearDownWithError 메서드 존재 이유
테스트를 진행하는 데 다른 테스트끼리 영향을 주고 받으면 안 되기 때문에,
외부요소, 방해요소 제거를 위해서 테스트 할때마다 setUpWithError 에서 sut를 다시 넣고, 테스트 이후 tearDownWithError 에서 초기화 시킨다.
setUpWithError()
특정test()
tearDownWithError()
이렇게 한 세트로 동작.
Code Coverage
내 프로젝트 코드 중 test코드를 만든 비율
🤔 난 SceneDelegate에서 테스트 한 적 없는데 왜 테스트 됐다고 나오지?
내가 작성한 코드가 아니더라도 다른 테스를 하기 위해 거쳐갔기때문에 테스트했다고 판단함.
→ Code Coverage 허점. 무조건 믿을 수는 없음