[Test] 유닛 테스트 ( Unit Test ) 간단 예제

안녕하세요🐶

빈지식 채우기의 비니🙋🏻‍♂️입니다.

.

저번 포스팅에서는 유닛 테스트에 대해 간단히 알아보았습니다.

오늘은 유닛 테스트 지식을 바탕으로 간단한 예제를 만들어 보도록 하겠습니다.

.

아래의 글을 참고하시면 오늘 포스팅에 대해 더욱 잘 이해할 수 있을 것 같습니다.

 

[Swift] 유닛 테스트 ( Unit Test )의 기본

안녕하세요🐶 빈지식 채우기의 비니🙋🏻‍♂️입니다. . 어떠한 A 라는 기능을 개발하였고, 해당 기능을 테스트 하기 위해서 프로젝트 Run 을 하는 경우가 많습니다. 이 방법으로도 충분히 테

beanistory.tistory.com


간단 예제

우선 테스트를 위한 코드를 작성해 보도록 하겠습니다.

import Foundation

class Calculator {
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
}
  • 간단하게 Int 파라미터 2개를 받아 더하여 결과를 출력하는 함수를 만들었습니다.

❗️여기서 잠깐❗️

.

유닛 테스트를 진행하기 위해서는 타겟을 지정해야 합니다.

타겟 방법은 아래와 같이 2가지 방법이 있습니다.

etc-image-0

1. Target Membership 을 통해 타겟을 지정해준다.

etc-image-1

2. @testable import 를 통해 타겟을 지정해준다.


etc-image-2
테스트 실행 방법

방법1. Command + U

방법2. Test Navigator에서 실행 버튼 클릭

방법3. 코드 창에서 다이아몬드 모양 클릭

.

.

1. 테스트 성공 시

 

// 실제 테스트에서 사용될 메서드 블럭입니다.
func testMethod() throws {
    print("testMethod() 호출")

    // 테스트 소스
    let calculator = Calculator()
    let result = calculator.add(2, 3)
    XCTAssertEqual(result, 5, "더하기 비교 결과값이 다름")

    // testMethod()가 종료될 때 실행되는 코드 블럭입니다.
    // 먼저 선언된 블럭이 나중에 실행되는 LIFO 구조입니다.
    addTeardownBlock {
        print("addTearDownBlock 호출")
    }
}

etc-image-3
etc-image-4

  1. 처음에 만들었던 Caculator 의 add 메서드를 테스트 하려고 합니다.
  2. 2 와 3 의 인자를 받아 XCTAssertEqual 를 통해 5가 맞는지 틀린지 테스트를 진행합니다.
  3. 결과는 테스트 성공 으로 표시가 됩니다.

2. 테스트 실패 시

etc-image-5
etc-image-6
etc-image-7

  1. 처음에 만들었던 Caculator 의 add 메서드를 테스트 하려고 합니다.
  2. 2 와 3 의 인자를 받아 XCTAssertEqual 를 통해 6가 맞는지 틀린지 테스트를 진행합니다.
  3. 결과는 테스트 실패로 표시가 됩니다.

 


이상으로 간단하게 유닛 테스트 ( Unit Test ) 간단 예제에 대해 알아보았습니다.

전체 테스트 소스는 아래에 첨부하도록 하겠습니다.

더보기

import XCTest

@testable import RxSwift_Study_1

 

final class RxSwift_Study_1Test2: XCTestCase {

 

    // 타입 메서드로 시작 전 딱 한 번만 호출됩니다.

    // 모든 테스트 메서드에서 실행 전 정의하거나 초기화할 작업에 대해 구현합니다.

    override class func setUp() {

        super.setUp()

        

        print("전체 테스트 시작!")

    }

    

    // 각 테스트 메서드가 실행되기 전에 실행됩니다.

    // 각각 테스트 메서드에서 사용될 것들에 대해 초기화 하는 작업에 대해 구현합니다.

    override func setUpWithError() throws {

        try super.setUpWithError()

        

        print("테스트1 시작!(setUpWithError)")

    }

    

    // setUpWithError 와 동일하지만 다른 점은 실행 도중 발생한 에러에 대해 처리할 수 있는 점입니다.

    override func setUp() {

        super.setUp()

        

        print("테스트1 시작!(setUp)")

    }

    

    // 실제 테스트에서 사용될 메서드 블럭입니다.

    func testMethod() throws {

        print("testMethod() 호출")

        

        // 테스트 소스

        let calculator = Calculator()

        let result = calculator.add(2, 3)

        XCTAssertEqual(result, 6, "더하기 비교 결과값이 다름")

        

        // testMethod()가 종료될 때 실행되는 코드 블럭입니다.

        // 먼저 선언된 블럭이 나중에 실행되는 LIFO 구조입니다.

        addTeardownBlock {

            print("addTearDownBlock 호출")

        }

    }

    

    // 각각의 테스트가 종요되고 나서 호출됩니다.

    // 메서드 수행 후 정리하는 작업을 오버라이드하여 구현합니다.

    override func tearDown() {

        super.tearDown()

        

        print("테스트1 종료(tearDown)")

    }

    

    // tearDown() 메서드와 마찬가지로 각각의 테스트 종료 후에 호출 됩니다.

    // 다른 점은 해당 메서드는 실행 도중 발생한 에러에 대해 처리가 가능합니다.

    override func tearDownWithError() throws {

        try super.tearDownWithError()

        

        print("테스트1 종료(tearDownWithError)")

    }

    

    // 타입 메서드로 모든 테스트가 종료되고 딱 한번만 호출됩니다.

    // 모든 테스트를 마치고 정리해야 할 작업에 대해 구현합니다.

    override class func tearDown() {

        super.tearDown()

        

        print("전체 테스트 종료!")

    }

    

}

감사합니다.


참고

반응형

'iOS📱 > 유틸' 카테고리의 다른 글

[Test] 유닛 테스트 ( Unit Test ) 기본  (0) 2024.02.06