【Xcode】既存のプロジェクトにUnit Testを追加する方法
既存プロジェクトにUnit Testを追加する方法を調べたので書き残しておきます。
環境
- Xcode 13.2.1
Unit Testとは
Unit Test(ユニットテスト)とは、単体テストとも呼ばれ、プログラムを構成する比較的小さな単位(ユニット)の機能を正しく果たしているかどうかを検証するテストです。
Unit Testのためのターゲットを追加
Xcodeのメニューから File
> New
> Target...
をクリックします。
新しいターゲットを選択できるシートが表示されるので、そこでUnit Testing Bundleを選択してNext
をクリックします。
新しいターゲットのオプションを設定するシートが表示されるので、Product Nameに任意の名前を設定し、設定値の変更が必要であれば初期値から値を変更します。設定が完了したらFinish
をクリックします。
XCTestCaseクラスのファイル
ターゲットを追加すると、自動でXCTestCaseクラスのファイルが作成されます。
デフォルトで作成されているメソッド
デフォルトで作成されている4つのメソッドについて簡単に紹介します。
- setUpWithError()
- tearDownWithError()
- testExample()
- testPerformanceExample()
setUpWithError()
override func setUpWithError() throws { // ここにセットアップコードを入力します。このメソッドは、クラス内の各テストメソッドを呼び出す前に呼び出されます。 }
各テストメソッドを実行する前に一度呼び出されるメソッドで、テストメソッド毎にセットアップしておきたい処理を記述します。
tearDownWithError()
override func tearDownWithError() throws { // ここにティアダウンコードを配置します。このメソッドは、クラス内の各テストメソッドの呼び出し後に呼び出されます。 }
各テストメソッドが実行される後に一度呼び出されるメソッドで、テストメソッド毎にリセットしたい処理を記述します。
testExample()
func testExample() throws { // これは機能テストケースの例です。 // XCTAssertおよび関連する関数を使用して、テストで正しい結果が生成されることを確認します。 // XCTest用に作成したテストには、throwsおよびasyncとしてアノテーションを付けることができます。 //テストスローにマークを付けて、テストでキャッチされないエラーが発生したときに予期しないエラーが発生するようにします。 //テストを非同期としてマークして、非同期コードが完了するのを待つことができるようにします。その後、アサーションを使用して結果を確認します。 }
testExample
と名前にもある通り、こちらのコメントにはテストメソッドの使い方の記述があるだけなので、基本的にはこのメソッドは削除して、実際に行いたいテストメソッドを追加しましょう。
testPerformanceExample()
func testPerformanceExample() throws { //これはパフォーマンステストケースの例です。 self.measure { //ここに時間を測定したいコードを入れてください。 } }
こちらもパフォーマンステストに関する例が書かれています。例として作成されているだけなので削除して、実際にパフォーマンステストを行いたい場合は新たにパフォーマンステストを追加しましょう。
実際にテストしてみる
今回は例としてViewController
内で作成したsum(lhs: ,rhs: )
メソッドのテストを行います。左辺と右辺の足し算をするメソッドになります。
テストを作成
まず、指定したターゲット内のinternalで宣言されたソースコードにアクセスするには、@testable import ターゲット名
を指定する必要があります。
今回のターゲットは、SumApp
なので、@testable import SumApp
と指定しています。
では、早速テストを行います。
ViewController
のインスタンスを生成- テストメソッド
testSum()
を作成- テストメソッドはメソッド名が
test
から始まる必要があります。
- テストメソッドはメソッド名が
- テストメソッド内で
XCTAssertEqual
メソッドを実行して、左の値と右の値が同じであるかを判定します。- 今回は
1 + 1
を行っているので2
という結果が仕様通りの結果が返ってきているかを判定しています。
- 今回は
func testSum() throw { XCTAssertEqual(viewController.sum(lhs: 1, rhs: 1), 2) }
テストを実施
テストを実施するには、control
+ U
のショートカットキーを使用するか、行番号の箇所にあるひし形のマークを押すことで実行出来ます。
class
横のひし形を押すと、クラス内の全てのテストメソッドが実行され、メソッド横のひし形を押すとメソッド単位でのテスト実行が行えます。
テストの結果を見る
テストが成功すると、このように画面にTest Succeeded
の表示が現れます。
おわりに
プロジェクト作成時にUnit Testを含めて作成出来ますが、既存のプロジェクトにも簡単にUnit Testの追加が出来ることが分かりました。
テストを書いて、安全なプログラム作りを心がけていきたいです。