Unit Test는 한국어로 단위 테스트 또는 유닛 테스트라고 한다. Unit Test는 학부 때 소프트웨어 공학이라는 강의에서 배웠던 내용이다. 개발하는 과정 중 Unit Test가 가장 기초적이면서 중요하다고 생각이 난다. 그래서 Xcode에서 Unit Test를 하는 방법에 대해 이야기하려고 한다.
이 글은 아래 글을 참고해서 정리했습니다.
https://zeddios.tistory.com/48
Unit Test는 무엇일까? 바로 소스 코드에서 특정 모듈, 클래스가 개발자가 의도한 대로 정확하게 작동하는지 테스트하는 과정이다. 즉, 모든 함수나 메소드에 대한 테스트 케이스를 작성하는 과정이다.
크게 Unit Test는 프로그램 내의 버그를 찾아내고 코드의 퀄리티를 높이기 위해 만든다. 만약, 개발한 프로그램이 크고 메모리가 많이 들어서 로컬 환경에서 실행시키기 어려운 경우 개발자들은 Unit Test를 만들어서 빠르게 본인의 코드가 제대로 작동하는지 확인할 수 있다.
시작하기 앞서, 사용하는 Xcode 버전은 12.3 (12C33) 입니다.
프로젝트를 생성할 때 다음과 같이 Include Tests에 체크를 해준다. 전 버전에서는 Test와 UITest 체크 부분이 각각 존재했지만 합쳐진 것으로 보인다.
그럼 다음과 같이 프로젝트명Test
와 프로젝트명UITest
폴더가 생성 될 것이다. 그 중 Test폴더에 있는 Swift 파일을 보면 다음과 같다.
클래스를 보면 XCTestCase
를 상속받고 있으며 setUpWithError()
, tearDownWithError()
, testExample()
, testPerformanceExample()
함수들이 있다.
XCTestCase 클래스는 테스트 케이스,
테스트 메소드 등을 정의하기 위한 클래스다. 그리고 각각의 메소드는 다음과 같은 역할을 한다.
3번 함수가 잘 실행 될 수 있게 준비행동을 하는 부분이 1번 함수이고 3번 함수가 실행 된 후 뒷정리를 하는 부분이 2번 함수라고 할 수 있다.
간단한 예제를 보려고 한다. 먼저 Even.swift 파일을 생성헤 다음과 같은 구조체를 정의해준다.
다음은 프로젝트명Test
폴더의 swift파일의 클래스 안에 다음과 같은 테스트 예제 코드를 작성해 준다.
XCTAssertTrue
를 통해서 해당 숫자가 짝수이면 참, 아니면 거짓을 판별한다. 그래서 해당 number 변수의 값이 짝이면 테스트 성공, 홀수면 테스트 실패가 될 것 이다.
테스트를 수행하기 위해서는 위 그림에서 라인 수가 적힌 부분을 보면 마름모 모양이 있을 것 이다. 이것을 클릭하게 되면 테스트를 진행하게 된다.
테스트가 성공적으로 이루어지면 아래 그림과 같고
실패하게 되면 아래 그림과 같게 된다.
오늘은 간단하게 Xcode 상에서 Unit Test를 진행하는 방법에 대해서 공부했다. Unit Test를 통해서 코드 작성만 중요한 것이 아니라 테스트 케이스에 대해 작성하는 것도 중요하다는 것을 알게 되었다. 물론 Unit Test를 성공적으로 끝냈다고 해서 만든 앱이 완벽하다는 것은 아니니깐 주의해야 한다!!
(1.21 추가)
예제 참고할 때 많이 찾아가는 사이트에서 보고 나름 처음 Unit Test를 진행할 때 기억하면 좋을 것 같아서 내용을 추가합니다.
참고 사이트 : https://www.raywenderlich.com/960290-ios-unit-testing-and-ui-testing-tutorial
test함수를 작성할 때 함수명은 test~
로 시작해야 하며
func testScoreIsComputed() {
// 1.given
let guess = sut.targetValue + 5
// 2.when
sut.check(guess: guess)
// 3.then
XCTAssertEqual(sut.scoreRound, 95, "추측된 값은 틀립니다.")
}
위 코드 처럼 given
-> when
-> then
이 순서를 갖추어서 코드를 작성해주면 좋을 것 같다.
Unit Test에서then
부분에서 사용되는 함수들이 다양하다. 위 처럼 XCTAssertEqual
메소드는 추측 된 값과 결과 값이 같은지 아닌지를 True
or False
로 반환한다.
다른 함수들은 다음 내용에서 공부하려고 합니다.