본문 바로가기

Swift

[Swift] Unit Test, TDD

안녕하세요 Wody 입니다.

 

오늘 알아볼 것은 Unit Test와 TDD입니다.

 

테스트란?

더보기

테스트는 말 그대로 시험하는 것입니다. 

 

우리가 만든 코드가 잘 작동하는지 검증해야 안심이 되죠? 만약에 테스트 없이 코드를 쭉 작성했는데,

잘 작동하지 않는다면, 어느 코드가 잘못된 동작을 하고 있는지 알 수 없을지도 모릅니다. 

 

그렇기 때문에 우리는 코드의 단위(유닛)별로 테스트를 해야 하는 것입니다!

 

TDD(Test-driven development TDD)

TDD - 위키백과

TDD는 개발을 하는 '방법' 중 하나입니다.

 

우리가 어떤 목적을 가진 프로그램을 개발할 때 다양한 방법을 가지고 개발하는데요.

객체 지향 프로그래밍, 애자일 방법론, 절차 지향 프로그래밍 등등 개발에 대한 다양한 시선과 방법이 있습니다.

 

그럼 TDD는 어떻게 하는것이냐!? 크게 3가지 싸이클이 있습니다.

1. 일단 실패하든 말든 '어떤 기능을 담당하는 코드'를 만든다

2. '어떤 기능을 담당하는 코드'가 테스트를 통과하게 만든다

3. '어떤 기능을 담당하는 코드'를 리팩토링해 더 좋은 코드로 만든다

를 반복하는 것입니다.

 

그럼 TDD를 하면 장점이 무엇이 있을까요?

 

TDD를 하게 되면 '어떤 기능을 담당하는 코드'가 무엇이, 어떻게 필요한지 고민하게 되는데

이런 고민은 프로그램의 기능 분리에 큰 도움을 줄 것입니다.

 

그리고 테스트를 진행한 코드라서 신뢰성이 생기며, 기능 분리 덕분에 프로그램을 유지 보수하는데 큰 도움을 줄 것입니다.

 

Xcode에서 Unit Test하기

자! 그러면 TDD를 실천하기 위해선 Test하는 방법을 알아야겠죠?

 

참고자료 - Raywenderlich

 

Unit Test Target Setting

더보기

0. 가장 먼저 프로젝트를 생성한 후, 프로젝트 파일 - TARGETS에 '+' 버튼을 눌러줍니다.

 

1. filter에 'Test'를 검색 후 'Unit Testing Bundle'를 선택해줍니다.

 

2. 기타 세팅을 해주신 후 Finish를 누르면 테스트 준비가 끝납니다!

 

 

XCTest

Apple Developer - XCTest

XCTest는 Test를 위한 Framework입니다. 

XCTest를 사용하는 방법 및 기능은 공식문서를 참고하는게 좋습니다

 

 

테스트하기

 

 

만들어진 테스트 파일을 보면 

Class 이며, XCTestCase를 상속받고 있습니다.

 

공식문서의 예제는 TDD의 화신처럼 TDD안에서 코드를 구현하고, 테스트하고 있습니다.

 

하지만 처음부터 TDD를 상정하고 만든 코드가 아니라면 XCTest 밖에 코드가 있겠죠?

 

그런 상황을 가정하고 밖에 코드를 만들어봤습니다.

 

그냥 Int를 더하는 함수는 기본 구현이 되어 있으니(사실은 String도 그렇습니다) 

 

간단한 함수를 만들어봤습니다.

 

이 코드를 테스트 해보겠습니다.

 

 

제가 구현한 Calculator 클래스는 'UnitTest' 프로젝트 안에서 선언되었기 때문에 'UnitTest'를 testable하게 import 했습니다.

(만약 프로젝트 이름이 'HappyCoding'이라면 'UnitTest' 이름 대신 'HappyCoding'이 들어가겠죠?)

 

 

그리고 우리가 테스트 할 클래스를 sut(system under test) 프로퍼티로 생성합니다

 

그 다음 `setUpWithError()` 메서드에 sut를 초기화 해줍니다. 이 메서드는 testExample()과 같은 테스트 메서드가 실행될 때 마다 호출됩니다.

 

 

그리고 대망의 우리가 만든 코드를 테스트 할 시간입니다.

 

테스트 코드를 만들땐 'test'로 시작하는 이름을 갖고 있어야 합니다!

 

그리고 예시로 사용한 XCTAssertEqual의 경우 첫번째 엘리먼트는 input값을, 두번째 엘리먼트는 예상되는 output값을 입력해주면 됩니다.

 

 

다양한 테스트 조건은 XCTest 공식문서의

Test Assertions 섹션을 참고하면 좋습니다!

 

지금까지 XCTest 세팅하기 및 간단하게 테스트 해보기를 알아보았습니다!

 

진정한 테스트는 고의적으로 오류를 내고, 예외처리를 하는 것 까지가 올바른 방법이라고 생각하는데요.

 

다음에 XCTest에 대해 글을 쓸 땐 오류와 예외처리까지 다뤄보도록 하겠습니다!