[iOS] Unit test(단위 테스트)

Posted by Sung Kyungmo on September 16, 2019

Unit test

유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.
즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.
이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.
이상적으로, 각 테스트 케이스는 서로 분리되어야 한다.
이를 위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다.
유닛 테스트는 (일반적인 테스트와 달리) 개발자(developer) 뿐만 아니라 보다 더 심도있는 테스트를 위해 테스터(tester)에 의해 수행되기도 한다.

한마디로 Unit test는 원하는대로 동작하는지 확인하는 테스트(검증)) 절차이다.


Xcode에서 Unit test

프로젝트 생성시 하단에 Include Unit Tests 체크하게되면 자동으로 유닛 테스트를 포함한 프로젝트가 만들어 집니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import XCTest
@testable import UnitTestSample

class UnitTestSampleTests: XCTestCase {

    override func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}

  • setUp() : 테스트 메소드가 호출되기 전에 상태를 재설정 할 수있는 기회를 제공합니다.(초기화)
  • tearDown () : 테스트가 끝난 후 정리를 수행 할 수있는 기회를 제공합니다.(해제)

테스트 메소드는 메소드명 앞에 test 접두어를 붙여야합니다.
test로 시작하는 메소드는 좌측에 다이아몬드 모양의 테스트 버튼이 생기게 되고 테스트가 가능해집니다.
처음에 말했듯이 각 테스트 케이스는 분리하여 작성해야 합니다.
각 메소드는 하나의 기능만을 수행해야하기 때문에 하나의 테스트 메소드 안에 여러 케이스를 넣는 것은 올바른 방법이 아닙니다.


Test Assertions

Test Assertions 을 사용하여 테스트 메소드에서 예상 값과 실제 결과를 확인할 수 있습니다.

  • Boolean Assertions: true 또는 false 결과 테스트
    • XCTAssertTrue
    • XCTAssertFalse
  • Nil and Non-nil Assertions: nil 또는 non-nil 결과 테스트
    • XCTAssertNil
    • XCTAssertNotNil
  • Equality and Inequality Assertions: equal 또는 unequal 결과 테스트
    • XCTAssertEqual
    • XCTAssertEqualObjects
    • XCTAssertNotEqual
    • XCTAssertNotEqualObjects
    • XCTAssertEqualWithAccuracy
    • XCTAssertNotEqualWithAccuracy
  • Comparable Value Assertions: 값을 비교하여 크거나 작은지 테스트
    • XCTAssertGreaterThan
    • XCTAssertGreaterThanOrEqual
    • XCTAssertLessThanOrEqual
    • XCTAssertLessThan
  • NSException Assertions: NSException을 던지는지 안던지는지 테스트
    • XCTAssertThrows
    • XCTAssertThrowsSpecific
    • XCTAssertThrowsSpecificNamed
    • XCTAssertNoThrow
    • XCTAssertNoThrowSpecific
    • XCTAssertNoThrowSpecificNamed
  • Failing Unconditionally: 무조건 실패하는 테스트
    • XCTFail