• Xcode에 빌트인되서 제공되는 테스팅 프레임워크
  • 테스트 프레임워크의 필요성
    • 자동화
    • 명세 작성
  • 테스트 피라미드 -> 완전성, 테스트 시간, 테스트 수
    • 유닛테스트
      • 소스코드 단위의 테스트
      • 빠르다.
      • 성능 테스트도 가능
    • 통합테스트
      • 유닛테스트로 테스트 한 기능들이 합쳐져서 돌아갔을 때 제대로 돌아갈 수 있는지 검증하는 것
    • UI 테스트
      • 블랙박스 테스트
      • 느리다
  • XCTest 사용법
    • 각 테스트 케이스: test 접두사가 붙어야 된다.
    • setUp, tearDown을 통해서 각 테스트마다 공통적으로 준비되어야 되는 요소들을 세팅 가능
    • UI Test: 가상의 Application(XCUIApplication)을 실행시키는 것
      • 현재 화면에서 동적으로 요소를 찾아서 실행한다.
  • 테스트 상황
    • Happy path: 유효한 입력, 유효한 출력
    • 에러 처리: 에러가 제대로 핸들링되는가
  • 테스트 타겟은 여러개 존재할 수 있다.
  • Code Coverage: 코드가 실제 실행된 횟수를 볼 수 있는 Xcode의 기능
  • 테스트는 앱 개발 과정에서 필수적인 단계다
  • Test Plan
    • 테스트를 다양한 방식으로 여러번 돌릴수록 버그가 발견될 확률이 높아진다.
      • 다른 언어
      • 랜덤한 순서
      • sanitizer 사용
      • argument나 environment variable 변경
    • 기존에는 Scheme으로 변경할 수 있었다.
    • 테스트 플랜 기능은 다양한 옵션으로 테스트를 여러번 돌릴 수 있게 한다.
    • 여러 스킴 사이에서 공유가 가능하다.
    • 테스트 자체의 활성/비활성 설정도 쉽게할 수 있다.
    • 내용 자체는 .json 구조로 된 파일
  • 기존 스킴에 테스트 플랜 사용할 수 있도록 바꾸기 -> 스킴 열고 버튼 하나 누르면 끝
    • 기존 설정 기반으로 자동으로 만들어 줄 수도, 있는 테스트 플랜을 활용할수도 있다.
  • 기대하는 유즈케이스
    • Different Sanizier
    • language, location, locale 시뮬레이션
  • CI에 적용
    • CI: 프로젝트 자동 빌드 및 테스트

    • Xcode Server를 활용할수도 있지만, 자체적으로 구축할수도 있다.

      1. 전용 기기 마련
      2. 테스트를 빌드하고 돌린다. -> xcodebuild
      $ xcodebuild build-for-testing -project MyProject.xcodeproj -scheme MyScheme -destination 'platform=iOS, name=My iPhone'
      
      $ xcodebuild test-without-building -project MyProject.xcodeproj -scheme MyScheme -destination 'platform=iOS, name=My iPhone'
      
      1. 테스트 결과(XCResultBundle)를 이슈 트랙커에 넘긴다. -> XCResultTool을 통해서 resultbundle을 읽는다.
      2. 코드 커버리지를 추적한다.