iOS - Unit Test

이한솔·2024년 8월 12일
0

iOS 앱개발 🍏

목록 보기
53/54

Unit Test

Unit Test는 Unit(소프트웨어의 개별 구성 요소)이 예상대로 작동하는지 검증하는 테스트 방법이다. Swift에서는 XCTest 프레임워크를 사용하여 유닛 테스트를 작성할 수 있다.



Unit Test의 원칙

First

테스트는 빨라야 한다.

Independent

각각의 테스트가 서로 독립적으로 실행되어야 한다.

Repeatable

테스트는 반복적으로 실행될 수 있고, 항상 같은 결과를 내야 한다.

Self-validating

테스트는 자동으로 결과를 검증할 수 있어야 한다.
특정 상태를 수동으로 미리 만들어야하는 테스트는 만들지 않는다.

Timely

코드 수정 후 바로 테스트를 실행해 수정이 다른 기능에 영향을 미치지 않았는지 확인해야한다.
💡 테스트 주도 개발(Test-Driven Development, TDD)에 적합한 원칙이지만, 미처 적용하지 못하는 경우도 있다고 한다.



Unit Test 생성 방법

  1. 프로젝트 생성시 Inclide Test

  2. 프로젝트 > Editor > Add Target > Unit Testing Bundle

  3. Test Navigator로 생성

    테스트 파일 이름은 보통 `~Tests`로 생성한다. 

XCTest 메소드

세팅 메소드

setUp(): 테스트 메소드 실행 전에 호출되어 초기 설정 수행 (테스트에 필요한 객체 생성, DB 초기화, 네트워크 연결 등)
setUpWithError(): 테스트 메소드 실행 전에 호출되어 오류가 발생할 수 있는 초기 설정 작업 수행, 초기 설정 중 오류 발생시 알릴 수 있다.

tearDown(): 테스트 메소드 실행 후에 호출되어 테스트로 인해 변경된 상태를 정리하거나, 사용한 자원을 해제
tearDownWithError(): 테스트 메소드 실행 후에 호출되어 오류가 발생할 수 있는 작업 수행, 정리 작업 중 오류 발생시 알릴 수 있다.

검증 메소드

XCTAssertTrue(_:): 주어진 조건이 true인지 검사, false면 실패
XCTAssertFalse(_:): 주어진 조건이 false인지 검사, true면 실패

XCTAssertEqual(_:_: ): 두 값이 같은지 검사, 다르면 실패
XCTAssertNotEqual(_:_: ): 두 값이 다른지 검사, 같으면 실패

XCTAssertNil(_:): 주어진 값이 nil인지 검사, nil이 아니면 실패
XCTAssertNotNil(_:): 주어진 값이 nil이 아닌지 검사, nil이면 실패

XCTAssertThrowsError(_:): 주어진 코드 블록이 오류를 발생시키는지 검사, 오류 미발생시 실패
XCTAssertNoThrow(_:): 주어진 코드 블록이 오류를 발생시키지 않는지 검사, 오류 발생시 실패


Test 메소드 생성 방법

테스트 코드를 작성할 때 Given, When, Then 패턴을 사용하면 테스트의 목적과 과정이 명확해지고, 테스트 코드의 가독성을 높일 수 있다.

import XCTest

final class MyFeatureTests: XCTestCase {

    override func setUp() {
        super.setUp()
        // 데이터베이스 초기화, 필요한 객체 생성 등 테스트를 위한 초기 설정
    }

    override func tearDown() {
        // 데이터베이스 정리, 메모리 해제 등 테스트 후 정리 작업
        super.tearDown()
    }

    func testExample() {
        // Given 초기 상태 설정
        let value = 2

        // When 동작 수행
        let result = value * 2

        // Then 결과 검증
        XCTAssertEqual(result, 4, "결과는 4여야 합니다.")
    }
}

Given (조건)

테스트를 실행하기 전에 설정해야 할 데이터나 환경 등 조건을 정의한다.

When (행동)

Given 단계에서 준비한 조건을 바탕으로 기능을 실행한다.

Then (검증)

When 단계에서 수행한 행동의 결과를 검증해서 성공 여부를 판단한다.

0개의 댓글