Introduction to XCTest
Test Pyramid
피라미드 형태의 Test plan 을 통해 효율적이고 철저하게 검사하면서도 속도를 놓치지 않도록 균형을 잡을 수 있다.
Unit test 는 Test 의 기본 단위이다.
단일한 코드 조각 (보통은 function) 에 대해 특정 입력을 넣고 기대하는 출력이 나오는지 확인한다.
Unit test 짧고 단순하며 빠르다. 또한, 모든 Test 의 기반이 되므로 최대한 대부분의 functions 이 Test 될 수 있도록 하는 것이 좋다.
Integration test 는 좀 더 넓은 범위에 적용된다.
앱의 여러 부분들 혹은 class 들이 모여 서로 올바르게 상호작용하고 동작하는지 확인한다. Unit test 를 통해 단일한 동작들이 문제 없는지 확인한 후 이들의 Integration 이 잘 이루어 지는지 확인하는 순서가 바람직하다.
UI test 를 통해 사용자와 앱의 상호작용을 확인한다.
UI test 는 상대적으로 시간이 더 걸리지만 앱이 제작된 의도대로 동작하는지 확인하기 위해 필수적이다.
이후 기본적인 XCTest 사용 방법에 대한 프레젠테이션은 기록하지 않음.
setUP(), tearDown()
try XCTUnwrap()
XCTAssertEqual()
test function 작성 방법 (제대로 동작할 때, 잘못된 입력을 받았을 때)
XCTAssertThrowsError()
UI test 작성 방법
.isHittable
Debugger 의 명령줄을 통해 실행된 UI elements 확인하기
po app
po app.images 를 통해 앱에서 사용된 image 확인
Code coverage
Test plans
Getting The Most Out of Your Tests
앱에 실질적인 변화가 없더라도 Xcode 의 테스트 옵션에 따라 여러번 테스트를 수행하는 것은 큰 도움이 될 것이다. 아래에서 몇 가지 테스트 방식을 소개하겠다.
Different localizations
개발 당시 UI에 사용된 언어와 다른 언어를 사용하는 경우에 추가적인 버그를 발견할 수 있다.
Random order
테스트 순서에 변화를 주면 숨어있는 테스트 메서드 간의 의존성을 발견하게 될 수 있다.
Sanitizer 사용하기
여러개의 Sanitizer 를 동시에 사용하는 것도 좋은 방법이다. (Address sanitizer & Thread sanitizer)
Arguments 혹은 환경 변수에 변화를 주기
모의 객체나 데이터를 작성해 테스트에 사용하는 경우 유용한 결과를 줄 수 있다.
Test Plans
위의 옵션들은 Test Scheme 에서 설정할 수 있다. 하지만 각 테스트에 대해 매번 scheme 을 설정해야 하는 번거로움이 있다. 우리는 손쉽게 다양한 옵션으로 여러번 테스트를 진행하고 싶기 때문에 Xcode 11 에서 Test Plans 이라는 새로운 기능을 도입했다.
Test Plans 은 다양한 세팅 값을 가진 여러번의 테스트 진행을 돕는다. 테스트의 여러 변수를 한 자리에서 설정한다. 그리고 이를 여러 scheme 들 간에 공유할 수 있다. xcode 와 CI / xcode server 를 위한 xcodebuild 에서 지원된다. 기존의 프로젝트에 도입하기 쉽다.
Test Plan File 은.xctestplan 확장자를 가진 JSON 파일이다. 실행할 테스트, Test configuration 에 대한 정보를 가진다. 해당 프로젝트에 포함되는 파일이며, 하나 이상의 Scheme 에 의해 참조될 수 있다.
Test Configuration 은 Plan 의 테스트에서 한 번의 수행에 대한 설정이다. 각 configuration 마다 고유한 이름을 작성할 수 있다. Configuration 들 간에 공유되는 속성을 상속할 수 있다. 즉, 매번 똑같이 설정해야 할 것이 있다면 반복하지 말고 공통 속성을 설정하면 된다.
Continuous integration workflows
CI 는 test building & running 을 자동화하는 것이다. custom CI 를 작성하는 방법을 알아보자.
Build Your Own CI
1. Building machine 에서 test build 하기
2. 여러 종류의 device 에서 test 실행하기
1, 2 과정의 Test building & Running 은 xcodebuild 를 통해 진행할 수 있다. xcodebuild 는 xcode 의 command line interface 이다.
다음의 명령으로 test 를 진행할 수 있다.
$ xcodebuild test
-project projectName.xcodeproj
-scheme MyScheme
-destination 'platform=iOS,name=My iPhone'
$ xcodebuild bulid-for-testing
$xcodebuild test-without-building
$ xcresulttool
다양한 장치에서 검사 진행하기
$xcodebuild test
-destination 'platform=iOS,name=My iPad',
-destination 'platform=iOS,name=My iPad mini',
-destination 'platform=iOS,name=My iPhone'
Result Bundle
테스트 building, running 의 결과가 기록된 파일
$ xcodebuild test
-resultBundlePath /path/to/ResultBundle.xcresult
xcresulttool
result bundle 의 내용에 programmatic 하게 접근하는 방법.
3. Issue tracker
다음 명령으로 test 결과를 가져와 Issue tracker 에 feed 하기
$ xcrun xcresulttool get --path ResultBundle.xcresult --format json
$ xcrun xcresulttool formatDescription get
4. Code coverage 추적하기
code coverage 에 대해 programmatic 하게 접근하는 방법.
$ xcrun xccov view --report ResultBundle.xcresult
두 개의 code coverage report 를 비교하기
$ xcrun xccov diff --json Before.xcresult After.xcresult
'iOS 개발 > App 개발 관련' 카테고리의 다른 글
[iOS] 모의 URLSession 으로 네트워킹 Test 하기 (0) | 2021.07.30 |
---|---|
[iOS] TDD(Test Driven Development) Tutorial (0) | 2021.07.16 |
[iOS] Unit & UI Testing (0) | 2021.07.10 |
[iOS] MVC 구조의 앱을 MVVM 으로 바꾸기 (0) | 2021.06.25 |
[iOS] 최고의 디자인 패턴, MVC 에 대한 오해 (0) | 2021.06.24 |