実務で使ってないし...
どれほど便利か分からないし...
そう思ってテストコード書いたことない方へ!
改めて基礎を学んだら意外とスムーズに理解できるので、Swiftのテストコード基本知識をまとめてみました!
Swiftのテストコード = XCTest(フレームワーク)
と思ってもらってOKらしいです。
🤭Swift6.0からTestingという新たなフレームワークも出ましたがまずはXCTestをサクッと学ぼう!
Testing
XCTestを使うと、手動で動作確認しなくても、自動でコードの動作をチェックできる ようになります。
本記事では、XCTestの基本を解説しながら、実際のコード例も交えて紹介します。
XCTestとは?
XCTestは、Appleが提供する単体テストのためのフレームワークです。
✅ アプリのバグを早く見つける → 手動で動かさなくてもチェックできる
✅ 修正による影響を防ぐ → 変更した部分が他に影響を与えていないか確認できる
✅ 安心して開発できる → 自動テストがあれば、新しい機能を追加するときも安心!
では、早速 XCTestの基本的な使い方を見ていきましょ!
XCTestの基本構成
Swiftのテストを書くには、XCTestCase を継承したクラスを作ります。
基本の流れは次の通り:
1. テストクラスを作成する
2. 初期化テストメソッドを書く
3. XCTAssertで結果をチェックする
1.テストクラスを作成する
Swift(UI)アプリを作ると、自動でテスト用のファイルを生成できます。例えば、MyAppTests.swift というファイルがあった場合、こんな感じのコードが入っています。
自動で作成せずとも後から自分で作成することもできますよ!
import XCTest
@testable import MyApp // 自分のアプリのコードをテストできるようにする
final class MyAppTests: XCTestCase {
override func setUp() {
// 各テストの前に呼ばれる
super.setUp()
}
override func tearDown() {
// 各テストの後に呼ばれる
super.tearDown()
}
func testExample() {
// ここにテストを書く
}
}
2.初期化テストメソッドを書く
基本的にoverrideメソッドは以下2つ。
setUp
override func setUp() {
super.setUp()
// 各テストが実行される前に呼ばれる
}
テストの前に準備をするメソッドです。
例えば、データを初期化したり、テスト用のオブジェクトを作成するのに使います。
tearDown
override func tearDown() {
// 各テストが終わった後に呼ばれる
super.tearDown()
}
テストが終わった後に後片付けをするメソッドです。
例えば、一時ファイルを削除したり、メモリを開放する処理を入れます。
3.XCTAssertで結果をチェックする
テストでは、XCTAssert を使って値をチェックします。
基本はXCTAssert◯◯◯
メソッドで判定します。(XCTFailは例外!)
1.XCTAssertEqual(値が等しいかチェック)
XCTAssertEqual(2 + 3, 5) // OK
XCTAssertEqual("Hello", "hello") // NG(大文字・小文字が違う)
「左と右の値が等しいか?」 をチェックします。
2.XCTAssertNotEqual(値が異なるかチェック)
XCTAssertNotEqual(2 + 3, 6) // OK(5と6は違う)
「左と右の値が違うか?」 を確認します。
3.XCTAssertTrue(条件がtrueか?)
let isUserLoggedIn = true
XCTAssertTrue(isUserLoggedIn) // OK
「この値はtrueか?」 をチェックします。
4.XCTAssertFalse(条件がfalseか?)
let isUserLoggedIn = false
XCTAssertFalse(isUserLoggedIn) // OK
「この値はfalseか?」 をチェックします。
5.XCTAssertNil(値がnilか?)
let value: String? = nil
XCTAssertNil(value) // OK
「この値はnilか?」 を確認します。
6.XCTAssertNotNil(値がnilでないか?)
let value: String? = "Hello"
XCTAssertNotNil(value) // OK
「この値はnilでないか?」 を確認します。
7.XCTFail(失敗を強制する)
XCTFail("このテストは失敗する")
このメソッドを実行すると、必ずテストが失敗 します。
「ここに来るべきではない」といったケースをチェックするのに使います。
実際にテストを書いてみよう!
例として、「文字列を逆にする関数」を作って、それをテストしてみます。
まず、StringReverser というクラスを作ります。
class StringReverser {
func reverse(_ input: String) -> String {
return String(input.reversed())
}
}
次に、この関数が 正しく動くかチェックする XCTestを書きます。
import XCTest
@testable import MyApp // 自分のアプリのコードをテストできるようにする
final class StringReverserTests: XCTestCase {
var reverser: StringReverser!
override func setUp() {
super.setUp()
reverser = StringReverser()
}
override func tearDown() {
reverser = nil
super.tearDown()
}
func testReverse() {
let result = reverser.reverse("Hello")
XCTAssertEqual(result, "olleH", "Hello を逆にすると olleH にな!")
}
}
これを実行すると…
✅ Hello を逆にすると olleH になるかチェックしてくれます!
まとめ
XCTestを使うと、Swiftのコードを自動でテストできる!
✅ setUp はテストの前に準備する
✅ tearDown はテストの後に後片付けをする
✅ XCTAssertを使って、値をチェックできる
Future Work
新しいApple純正テストフレームワークを使ってみたい未来の自分用メモ
Apple Document - Testing
Quiita記事