Swift3.0에서 UT 쓰기 ~ Manual Mocking ~
UT 작성 준비
Objective-C 클래스를 Swift로 테스트 코드를 만들 때
AppTests 파일에 새롭게 「Unit Test Case Class」파일을 추가한다.
Target은 AppTests에만 체크를 한다 (여기서 불필요한 파일에 체크하면 「Cannot load underlying module for ‘XCTest’」의 컴파일 에러가 일어난다...)
Objective-C Bridging Header를 작성합니다. 이하의 다이얼로그가 나오면 「YES」를 선택하면 자동으로 만들어 준다.
(AppTests BuildSetting의 Swift Compiler - General의 Objective-C Generated Interface Header Name에도 자동으로 등록됨)
Bridging Header 파일에 Swift의 UT 클래스에서 이용하고 싶은 Objective-C 클래스의 import를 기술한다.
(이번에는 AppTests-Bridging-Header.h라는 이름으로 작성)
AppTests-Bridging-Header.h
#ifndef App_Bridging_Header_h
#define App_Bridging_Header_h
// Swiftのテストクラスで使いたいObj-CクラスのHeaderを記述する
#import "App.h"
#import "AppSetting.h"
#endif
Swift 클래스를 Swift로 테스트 코드를 만들 때
Manual Mocking
Manual Mocking이란...
Manual Mocking을 이용한 UT
AppSettingTest.swift
/// Bridging-Header.hを作成しているのでXCTest以外のimportは無し
/// Swiftクラスをテストする場合もXCTestのimportは必要
import XCTest
@testable import App /// Swiftクラスのテストコードを作成するときに記述する. Obj-Cのみの場合は必要ない
class AppSettingTest: XCTestCase {
/// Appをテストクラス内で使い回すためにプロパティとして準備する(テストメソッドごとに作成してもOK)
var app: App? = nil
override func setUp() {
super.setUp()
/// Manual Mocking:Mock用インスタンスの中身を変更する
class AppMock: App {
override func isApp() -> Bool { ///AppクラスのisApp()メソッドをモック化して戻り値を指定
return true
}
}
/// Mock化したメソッドを含んだクラスを空のインスタンスに入れる
self.app = AppMock()
}
func testAppVersion() { /// このメソッドはAssertの例を示すために架空のメソッドを追加している
/// AssertはXCTestの書き方
XCTAssertTrue(app?.isApp())
XCTAssertFalse(app?.isApp())
}
}
Reference
이 문제에 관하여(Swift3.0에서 UT 쓰기 ~ Manual Mocking ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ca7mi/items/780ad9ba3b46045d21b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)