스위치 코드 덮어쓰기

7461 단어 XcodeSwift
Swift2.0에서 코드 덮어쓰기를 측정할 수 있습니다.
C0 범위만 사용할 수 있지만 없는 것보다 훨씬 좋습니다.
코드 덮어쓰기가 없으면 단원 테스트가 어디까지 덮어쓸지 모르고, 테스트 용례를 쓰는 동기도 높아지기 어렵다.
다음은 Xcode7.1을 통해 확인할 수 있습니다.

1. 테스트 대상


샘플 프로젝트로 제작SwiftCoverage.템플릿은 무엇이든 가능하지만 먼저 iOS-Single View Application으로 지정됩니다.

여기에User.swift를 추가하여 테스트 대상으로 삼는다.
User.swift

import Foundation

class User {
    var lastName: String = ""
    var firstName: String = ""

    init() {
        self.lastName = ""
        self.firstName = ""
    }

    init (lastName: String, firstName: String) {
        self.lastName = lastName
        self.firstName = firstName
    }

    func getFullName() -> String {
        return "\(firstName) \(lastName)"
    }
}

2. 작성 단위 테스트


SwiftCoverageTests/SwiftCoverageTests.swift는 이미 존재할 것입니다. 이를 다음과 같이 변경합니다.
SwiftCoverageTests.swift
import XCTest
@testable import SwiftCoverage

class SwiftCoverageTests: XCTestCase {

    func testGetFullName() {
        let user = User()
        user.lastName = "YAMADA"
        user.firstName = "Taro"
        XCTAssertEqual(user.getFullName(), "Taro YAMADA")
    }
}

3. 덮어쓰기 활성화


덮어쓰기를 측정하기 위해서는 스키마를 편집해야 합니다.이것은 아래와 같다.
켜기Product > Scheme > Edit Scheme..., [테스트]를 선택합니다.
그리고 Gather coverage data를 유효하게 한다.

4. 테스트 실행 및 측정 결과

Product > Test 또는 Cmd-U에서 유닛 테스트를 수행합니다.
(이 샘플에서 단원 테스트는 모두 통과해야 한다)
오른쪽 메뉴에서 보고 탐색기를 표시하고 덮어쓰기 탭을 선택하면 각 소스 코드에 대해 덮어쓰기를 확인할 수 있습니다.

또한 두 번 클릭User.swift하면 해당 코드로 이동하여 행에 따라 실행되는지 확인합니다.

여기서 convenience init가 전혀 테스트되지 않은 것을 볼 수 있습니다.

5. 테스트 수정


아까 결과에서 알 수 있듯이 convenience init의 테스트 용례가 부족하기 때문에 다음과 같이 추가됩니다testInit().
SwiftCoverageTests.swift
import XCTest
@testable import SwiftCoverage

class SwiftCoverageTests: XCTestCase {

    func testInit() {
        let user = User(lastName: "YAMADA", firstName: "Hanako")
        XCTAssertEqual(user.getFullName(), "Hanako YAMADA")
    }

    func testGetFullName() {
        let user = User()
        user.lastName = "YAMADA"
        user.firstName = "Taro"
        XCTAssertEqual(user.getFullName(), "Taro YAMADA")
    }
}
그리고 단원 테스트를 한 번 더 실시하고 커버 범위를 확인하면 이번에는 100%라는 것을 알 수 있다.

좋은 웹페이지 즐겨찾기