XCTest framework について学ぶ
XCTest framework は Apple 公式のテスティングフレームワーク。以下のテストについて実行可能。
- 単体テスト
- パフォーマンステスト
- UIテスト
XCTest は単体テストを指す場合が多い。
サードパーティのOSSフレームワークとの比較
Quick、NimbleはiOSアプリ開発で利用されることが多いOSS。ただし、これらはXCTestの上位互換ではない。
以下のようなデメリットを持っている。
- 学習コストが高い
- Xcodeと統合されていない
また、こうしたサードパーティのツールは実は内部でXCTestを呼び出している場合が多い。
そういった点でXCTestについて学習しておくことは有用である。
テストコードサンプル
import XCTest @testable import Calc // [1] Calcモジュールをテスト用にインポート final class CalculatorTests: XCTestCase { func testAdd() { let calc = Calculator() let result = calc.add(1, 2) XCTAssertEqual(result, 3) } }
@testable import Calc // [1] Calcモジュールをテスト用にインポート
@testable属性
を指定し、テスト対象のモジュールをインポートしている。Swiftにおいては、アクセス修飾子がpublic
or open
で宣言された要素にしかアクセスできない。
しかし、この特別なインポートを使うとその制限が緩和されてアクセスできるようになる。(デフォルトのinternal
属性にもアクセス可能に)
final class CalculatorTests: XCTestCase {
XCTestではXCTestCase
を継承したクラスがテスト用のクラスとして認識される。
func testAdd() {
テスト用のメソッドはtest
で始まる名前にする必要がある。
XCTAssertEqual(result, 3)
このような検証を実行する関数のことを一般的に アサーション という。
前処理(Setup)、後処理(TearDown)をまとめる
以下のように各テストメソッド毎に共通する Setup
、TearDown
を共通化できる。
final class CalculatorTests: XCTestCase { var calc: Calculator! override func setUp() { super.setUp() self.calc = Calculator() } override func tearDown() { super.tearDown() } func testAdd() { let result = calc.add(1, 2) XCTAssertEqual(result, 3) } func testMultiple() { let result = calc.multiple(1, 2) XCTAssertEqual(result, 2) } }