@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의 값이 예상한 값과 다를 경우 아래와 같이 표시된다.
'난 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 |