기어가더라도 제대로

[iOS-Test] test 왕초보 들어가기 본문

Xcode, build, etc/테스트

[iOS-Test] test 왕초보 들어가기

Damagucci-juice 2023. 1. 13. 15:47

시작에 앞서 강의의 출처를 밝힙니다. 

https://www.udemy.com/course/mastering-mvvm-for-ios/

 

MVVM Design Pattern Using Swift in iOS

Learn the Art of Building Modern iOS Applications

www.udemy.com

View 와 ViewModel을 분리해서 UI에 대한 의존성 없이 테스트가 가능해지는 장점 덕분에 테스트를 하기 수월하다 하셨는데요.

테스트를 안 배워볼 수 없겠죠? 

Unit 테스트 추가하기

상단바 - File -> New -> Target -> 에서 unit이라고 검색해서 나오는 테스트를 추가합니다. 

이렇게 추가가 되는데요. Unit 테스트에서 우리 프로젝트에 있는 파일을 볼 수 있어야해요. 방법은 두가집니다. 

1. 접근하고자하는 파일에 Target Membership 에서 "CalculateAppTests" 체크 박스를 눌러주는 방법

2. @testable import CalculateApp -> 처럼 프로젝트를 통째로 접근하는 방법

이게 편해서 이걸로 할게요


Test Function 추가하기

함수 생성하는 것과 비슷한데, 테스트 함수의 이름 시작은 반드시 "test" 로 시작해야합니다. 

그러면 왼편에 다이아몬드같은 체크박스가 생성이 되는데 이게 초록불이 들어오면 테스트를 통과한 것이에요. 

테스트 결과 확인 하기: XCTAssert ... 

가장 마지막에 XCTAssertEqual 이 문구가 result에 담긴 값이 8과 같은지 검증하는 문구입니다. 

결과가 같으면 초록 체크박스를 내놓습니다.

테스트 깔끔하게 하기

Calculator 클래스에서 더하기 함수와 빼기 함수를 테스트하는데요. 14번과 20번이 중복이 됩니다. 

이것을 테스트 클래스에서만 확인할 수 있는 프로퍼티로 빼면 중복을 줄일 수 있겠죠?

12번 라인에 테스트 클래스에서 접근해야하는 변수 선언 

"setUpWithError()" 와 "tearDownWithError()" 에서 테스트할 클래스인 "Calculator" 를 생성해서 넣어줍니다. 

각각의 함수는 테스트 클래스 생성시에 준비하고, 테스트 클래스를 없애는 준비를 하는 함수입니다. 

 

전체 코드 

테스트

import XCTest
@testable import CalculateApp
final class CalculateAppTests: XCTestCase {
    
    private var calculator: Calculator!
    
    override func setUpWithError() throws {
        try super.setUpWithError()
        calculator = Calculator()
    }
    
    override func tearDownWithError() throws {
        calculator = nil
        try super.tearDownWithError()
    }
    
    func test_AddTwoNumbers() {
        let result = calculator.add(5, 3)
        XCTAssertEqual(result, 8)
    }
    
    func test_SubtractTwoNumbers() {
        let result = calculator.subtract(5, 3)
        XCTAssertEqual(result, 2)
    }
}

calculator

import Foundation

class Calculator {
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
    
    func subtract(_ a: Int, _ b: Int) -> Int {
        return a - b
    }
}

 

결론

테스트 실행은 command + u 

테스트를 하면 앱이 어떤 기능을 수행해야하는지 코드를 일일히 확인하지 않고도 볼 수 있어 좋다.

MVVM과 테스트는 궁합이 좋다. 

감사합니다.

Comments