본문 바로가기

난 iOS개발자/UnitTest

Unit Test 작성해보기1

728x90

@testable

 

테스트케이스를 작성하기에 앞서 UnitTest파일의 상단에 아래와 같은 형식으로 코드를 작성 해줘야 한다.

@testable import "타겟 이름"

@testable은 Unit Test가 실제 앱 타깃에 있는 코드에 접근 하도록 하는 키워드이다.  위 @testable 은 UnitTestSample 이라는 타겟에 접근하기 위한 것으로, 보통의 앱 코드는 기본적으로 Internal 접근제어를 갖게 되는데 testable 키워드를 통해 테스트 하는 동안 다른 타겟에서 접근을 허용하도록 해주는 것이다.

 

 

 


아래 구조체에 대한 테스트 케이스를 작성해보자.

struct StrangeCalculator {

	func addNumbers(of numbers: [Int]) -> Int {
    	return numbers.reduce( 0, +)
    }
}

StrangeCalculator는 AddNumbers를 통해 전달받은 Int자료형배열의 합을 구해 Return하는 메서드이다.

 

UnitTest파일에는 아래와 같이 작성해본다.

import XCTest
@testable import UnitTestSample

class StrangeCalculatorTests: XCTestCase {

    var cal: StrangeCalculator!
    
    override func setUpWithError() throws {
        
        try super.setUpWithError()
        cal = StrangeCalculator()
    }
    
    
    override func tearDownWithError() throws {
        try super.tearDownWithError()
        cal = nil
    }
}

cal은 각 테스트 케이스에서 사용될 재료다. 우리는 StrangeCalculator 구조체에 접근 할 것이기 때문에 공동 리소스인 cal은 메서드 밖에서 생성해준다.

 

setUpWithError()에서는 각 테스트 케이스가 시작될 때 마다 cal을 초기화 해주는 코드를 넣도록 한다. 

teatDownWithError()는 사용한 리소스를 메모리에서 해제하는 코드를 넣는다.

 

cal이 옵셔널인 이유는 각 케이스가 실행/종료 될 때 마다 초기화를 시켜주기 위함이다.

 

 

 

첫번째 테스트 코드 작성해보기

 

addNumbers의 동작을 예측해보자. 전달된 Int자료형 배열의 값들을 모두 더한 값을 Return한다고 했다.

예를 들어 [1, 2, 3] 을 addNumbers로 전달한다면 6이라는 값이 반환될 것이다. 이와 같이 예측 가능한 시나리오를 아래와 같은 테스트 코드로 작성할 수있다.

 

func test_adddNumbers호출시_1_2_3을전달했을때_6을반환하는지() {
        //given
        let input = [1, 2, 3]
        
        //when
        let result = cal.addNumbers(of: input)
        
        //then
        XCTAssertEqual(result, 6)
    }
given, when, then 으로 테스트 코드를 작성하는 방법은 BDD(Behavior Driven Development) 테스트 방식을 참고한다.
BDD는 시나리오를 설정하고 예상대로 결과가 나오는지를 확인하는 방법이며.

Given: 시나리오 실행 되기 전 주어지는 조건을 설정하고
When: 예정된 행위에 대한 테스트를 하고
Then:  When에서의 행위로 인한 예상 가능한 결과를 확인

으로 테스트 코드를 구분하여 테스트의 흐름을 쉽게 파악 할 수 있게 해준다.

 

 

 

테스트 실행

 

라인 넘버가 표시되는 곳에 있는 다이아몬드(gutter라고 하네요.) 버튼을 눌러서 실행시키는 방법이 있고, Command + U 를 를 눌러서 실행할 수 있다.

거터를 통해 실행한다면 각 테스트 메서드를 개별실행이 되고 Command+U 실행은 테스트 코드 전체를 실해한다.

 

 

 

실행 결과 

 

1,2,3의 합은 6이 맞았다. 

 

만약 result의 값이 예상한 값과 다를 경우 아래와 같이 표시된다.

 

728x90

'난 iOS개발자 > UnitTest' 카테고리의 다른 글

Stub, Mock, Dummy  (0) 2023.09.04
Code Coverage 확인하기  (0) 2022.01.30
Unit Test 작성해보기2  (0) 2022.01.30
Unit Test 파일 살펴보기  (0) 2022.01.30
FIRST 원칙  (0) 2022.01.30