아직은 개린이

[iOS] Unit Test 해보기 본문

Swift + iOS/iOS

[iOS] Unit Test 해보기

jiyeonlab 2020. 3. 4. 16:25

앱을 하나 만들고 나니.. 내가 어떤 부분을 더 보완해야하고, 어떤 부분을 제대로 이해하지 못했는지 정리가 좀 되는 것 같아요..! (아직도 부족한게 참 많지만...)

 

그래서 오늘 해보려는 것은 Unit Test 입니다.

Unit Test에 대해 알아보기 전에 우선 TDD에 대해 알아보겠습니다.

 


TDD란?

TDDTest-Driven Development의 약자로, 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나입니다.
작성해야하는 프로그램에 대한 테스트를 먼저 작성하고, 이 테스트를 통과할 수 있도록 코드를 짜는 것입니다. 테스트를 통과하면 다음 테스트를 작성하고, 통과하는 작업을 반복하는 것이지요.  


간단한 예시로 생각해볼까요?
A라는 메소드는 "파라미터로 받은 값이 4로 나누어떨어지는지에 대한 Bool 값을 리턴"하는 일을 합니다. 이때 A라는 메소드를 바로 만드는 것이 아니라 testA라는 메소드를 만들어서 원하는 작업을 수행하는지 아닌지를 확인하는 테스트를 하는 것입니다. 이 테스트를 통과하면, A라는 메소드가 문제가 없다는 뜻이니 코드에 직접 적용하고 사용하면 된답니다!  


기존에는 저는 메소드를 내가 생각하는 로직대로 구현한 후에 디버깅으로 확인을 많이 해왔었습니당.. 하지만! 이렇게 하면 지금 디버깅에서는 내가 원하는 결과가 나왔다할지라도, 나중에 메소드들이 많아지면 문제가 생기고.. 문제 지점이 어디인지 찾고 찾고 찾아가야(?)하는 어려움이 있었습니다.
이런 이유에서 TDD 방법론은 요구사항을 명확히 한 후 테스트 코드를 작성하고, 테스트를 통과한 코드를 다시 리팩토링하는 과정으로 진행되기 때문에 프로젝트에 불필요한 코드가 줄어들고 목적성이 분명해진다는 장점이 있습니다.  


XCode에서 제공하는 테스트 방법은 2가지가 있습니다.
Unit Test와 UI Test인데요,
그 중에 오늘은 간단한 예제로 Unit Test를 해보도록 하겠습니다!


Unit Test 해보기

우선, 어떻게 Unit Test가 포함된 프로젝트를 만들고, 프로젝트가 어떤 식으로 구성되어있는지 살펴보겠습니다.

 

먼저 새로운 프로젝트를 생성하면서, 하단의 3개 체크박스 중 "Include Unit Tests"에 체크를 해줍니다.

새 프로젝트 생성하기

이렇게 새 프로젝트 생성한 후, 왼쪽의 Project Navigator를 살펴보면 기존에 없던 Test 폴더가 생성된 것을 확인할 수 있어요!

 

생성된 테스트 클래스의 코드를 살펴보면, 아래와 같습니다.

 

먼저 setUp 메소드테스트 메소드들이 호출되기 전에 불리는 메소드입니다. 즉, 테스트 코드를 실행하기 위해 필요한 초기화 작업들을 해줄 수 있는 곳이지요. 

tearDown 메소드는 각 테스트 메소드들이 실행을 마친 후에 호출되는 메소드입니다. 초기 단계로 복원이 필요한 작업들을 해주는 곳입니다.

testExample 메소드와 testPerformanceExample 메소드에는 우리가 테스트하려는 코드를 넣는 부분입니다.

 


그럼 실제 테스트 코드를 작성해볼까요?

제가 해보려는 것은 두 정수값의 합을 출력해보는 간단한 예제입니다!

 

1. 먼저 두 정수 값의 합을 계산하는 Model 코드를 작성합니다.

 

2. Test 클래스 코드를 다음과 같이 작성해줍니다.

 

setUp 메소드에서 model 객체를 초기화해주었고, testCalculate라는 테스트 메소드 안에 임의의 두 값을 addition 모델의 calculate 메소드가 제대로 된 값을 출력하는지 확인하기 위한 코드를 작성해주었습니다.

 

이 때, XCTAssertEqual 메소드를 이용하였는데요! XCTAssert 계열의 메소드를 이용해 원하는 조건들을 확인할 수 있답니다. (개발자 문서를 참고하여, 필요한 메소드들을 사용하면 됩니다)

 

3. 코드를 작성하고 나면, test 메소드 앞에 빈 마름모가 생기는 것을 확인할 수 있어요!

이 때, 이 마름모를 클릭해주면! 아래와 같이 초록색 체크 표시로 바뀌고, 테스트가 성공했다는 표시가 뜬답니다!

즉, 테스트가 성공했다는 것은 곧 우리가 작성한 Addition 모델의 calculate 메소드가 제대로 작성되었다는 뜻이겠죠! :)

 

그렇다면, value2 자리에 9가 아닌 10을 넣어볼게요. 그렇다면 실제 덧셈 결과는 20이기 때문에, XCTAssertEqual에서 제가 기대한 값과 실제 값이 다르기 때문에 "덧셈 계산이 잘못 되었습니다."라는 메시지와 함께 Test Fail이 뜨겠죠?


오늘은 간단히 유닛테스트를 어떻게 하는 건지에 대해 정리해보았습니다.

요즘 공부하고 있는 MVP 패턴과 유닛테스트를 함께 적용해보는 예제는 연습을 좀 더 해보고 정리해야할 것 같아요..!

 

조만간 추가적으로 글을 올려볼게요!!


 

참고 : https://ko.wikipedia.org/wiki/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F%84_%EA%B0%9C%EB%B0%9C
https://web.archive.org/web/20070628064054/http://xper.org/wiki/xp/TestDrivenDevelopment