본문 바로가기
iOS/개념

[iOS]Unit Test의 사용

by MINT09 2024. 2. 5.

이번 과제를 진행하면서 가장 필요성을 절실히 느꼈던 것이 바로 이 test였다. 여기까지는 문제가 없다는 것을, 안전하다는 것을 확신하고 다음 코드를 짜고 싶은 그 마음..!! 그런데 마침 활동학습에서 Unit Test와 TDD가 나왔길래, 정리해보았다. 

Unit Test

Unit Test는 메서드별 기능이 의도한 대로 구현되어 있는지 검증하는 것이다. 소스 코드의 특정 모듈이 의도된대로 정확히 작동하는지 검증하는 절차를 통해 작성한 코드의 안정성을 부여한다. 

그렇다면 어떤 Test를 작성해야 할까?

FIRST 원칙

Fast 빠르게

Independent / Isolated 독립적으로

Repeatable 반복 가능한

Self-Validating 스스로 검증하는

Timely 적시에

F. 테스트라는 목적에 맞게 빠르게 많은 시간을 들이지 않아야 한다.

I. A 테스트가 B나 C 테스트에 영향을 끼치지 않아야 한다.

R. 어떤 상황에 테스트를 하더라도, 실행 가능해야 한다. (네트워크 -> Mock 객체)

S. 테스트 내부에서 테스트가 이루어져야 한다. (즉, 판별 가능한 요소가 전부 테스트 내부에 존재해야 한다.)

T. 코드 작성 직전에 테스트를 작성해보자. (TDD)

위와 같은 FIRST 원칙을 기반으로 작성한다. 다만 이중에서 TDD는 Test-Driven Development로 개발을 하고자 하는 방법론을 이야기한다. 따로 봐보는 것이 좋을 듯 하다. 

Xcode에서

1. import

import XCTest
@testable import (테스트 하고 싶은 프로젝트)

2. test Class

class Tests: XCTestCase {
	var sut: (Test하고 싶은 객체)!
}

:sut란 System Under Test의 약자로 실행중인 시스템을 나타낸다. 

: 왜 강제 언래핑을 할까? _ FIRST의 F에 따라, 빠르게 하기 위해서. + 기능에 문제가 되지 않는다.

3. 환경설정

//초기 실행 환경 세팅.
//테스트가 동일한 조건, 동일한 환경에서 실행될 수 있도록 만들어준다. 
override func setUpWithError() throws {
    sut = LinkedList()
}
//세팅된 실행 환경 제거
//초기화
override func tearDownWithError() throws {
    sut = nil
}

4. test

func test_이렇게_가능한지() {
//given
사용할 값
//when
테스트
//then
결과
}

순서

  1. setUpWithError: 초기 실행환경 세팅
  2. func test : 테스트 함수 실행
  3. tearDownWithError: 실행 환경 초기화

→ 이렇게 1,2,3이 반복되는데, 2는 테스트 함수들이 순서대로 바뀌면서 실행된다.

→ 브레이크 포인트로 찍어보면서 확인해보면 더 확실하게 보인다!

 

물론 시간이 많이 들고 어렵겠지만 앞으로는 최대한 프로젝트에 Unit Test를 활용해야겠다. 반성, 반성.

'iOS > 개념' 카테고리의 다른 글

[디자인 패턴]Delegate Pattern  (2) 2024.01.27
[디자인 패턴]Observer Pattern  (1) 2024.01.27