[Test] Unit Test

한지민·2022년 6월 22일
1

Test

목록 보기
2/3
post-thumbnail

...?

독립적으로 진행되는 가장 작은 단위의 테스트를 단위 테스트라 한다.
관점에 따라서 하나의 기능, 메소드 등이 대상이 될 수 있고, 요구사항대로 정상적으로 동작하는지 해당하는 부분만 테스트를 진행한다.

Test Double?

테스트 대상과 연관된 객체의 행위나 역할을 대신하기 위한 요소들이 테스트 더블이다.

  • Dummy
    전달되지만 사용되지 않는 요소.

  • Stub
    호출 시 미리 정의된 값을 돌려주는 요소.

  • Fake
    실제 객체와 같은 동작을 하지만 실사용하기엔 부적합한 요소.

  • Spy
    Stub의 역할을 포함하면서 관련 정보를 기록하는 요소.

  • Mock
    호출에 대한 기대를 명세하고, 그 내용에 따라 동작하는 요소

xUnit Test Patterns
마틴파울러

XCTestCase

테스트 코드를 작성하기 위한 기본 클래스로 이를 상속받아 테스트 케이스, 방법, 성능 등을 정의할 수 있다.

구성

XCTestCase를 생성하면 다음 4개의 함수가 기본적으로 생성된다.

  • setupWithError
    매 테스트 시 가장 먼저 실행돼 모델이나 시스템을 초기화하는 역할
  • tearDownWithError
    매 테스트 마지막에 실행돼 사용된 객체의 할당을 해제하는 역할
  • testExample
    테스트 케이스 작성 예시 함수로 XCTestCase를 상속받은 클래스에서 메소드를 구현하면 자동적으로 테스트로 인식하게 된다.
  • testPerformanceExample
    테스트 성능 측정 예시 함수로 measure 메소르를 통해 테스트 하고자 하는 함수의 성능을 축정할 수 있다.

XCTAssert

표현식이 참인지 확인하는 매크로로 테스트 시 결과값을 확인하는데 사용한다.
이 외에도 XCTAssertNil, XCTAssertEqual 등 다양한 Assert가 존재한다.

XCTAssert

예시

덧셈과 곱셈 함수가 있는 Calculator 구조체를 작성한다.

struct Calculator {
    func add<T: Numeric>(lhs: T, rhs: T) -> T {
        lhs + rhs
    }
    
    func multiple<T: Numeric>(lhs: T, rhs: T) -> T {
        lhs * rhs
    }
}

XCTestCase를 상속받은 클래스에서 더하기, 곱셈 함수를 테스트하는 코드를 작성한다.

func testAdd() throws {
    //given
    let lValue = 30
    let rValue = 20
    
    //when
    let result = sut?.add(lhs: lValue, rhs: rValue)
    
    //then
    XCTAssertTrue(result == 50)
}
    
func testMultiple() throws {
    //given
    let lValue = 20
    let rValue = 10
    
    //when
    let result = sut?.multiple(lhs: lValue, rhs: rValue)
    
    //then
    XCTAssertTrue(result == 200)
}

테스트 성공 시

테스트 실패 시

Code Coverage

작성한 코드 중에서 실제 테스트 되는 범위를 나타내는 수치이다.

profile
IOS Developer

0개의 댓글