Swiftでテストダブル(Mock/Stub)をprotocolで設計する方法を初心者向けに解説!
生徒
「先生、Swiftでアプリを作ったときにテストを書きたいんですが、本物のサーバーやデータベースを使わずに動作を確認する方法ってあるんですか?」
先生
「とてもいい質問だね。そのために使うのが『テストダブル』と呼ばれる仕組みなんだ。特に『Mock(モック)』や『Stub(スタブ)』といった方法が有名だよ。」
生徒
「モックやスタブって、なんだか難しそうです…」
先生
「心配しなくて大丈夫。Swiftではprotocolを使うと簡単にテストダブルを作れるんだよ。日常の例えを交えながら説明していこう。」
1. テストダブル(Mock/Stub)とは?
まず、テストダブルとは本物の代わりに使う「ダミーの役者」のことです。サッカーの試合で、練習のときに本物の審判の代わりに先生がジャッジするようなものです。
Stub(スタブ)は「決まった返事をする代役」。例えば「必ず成功を返すサーバーの代わり」として使います。
Mock(モック)は「呼ばれたかどうか、何回呼ばれたか」を記録できる代役。テストで「本当にこの処理を呼んだのか?」を確認するために使います。
2. protocolで設計するメリット
テストダブルを作るとき、protocolを使うととても便利です。なぜなら、protocolは「ルール」を定義するだけで、実際の中身を入れ替えることができるからです。つまり、本番用の実装とテスト用の代役を自由に差し替えられるのです。
例えば、データを取得するサービスをprotocolで表現しておくと、本番では本物のAPI通信を、テストではスタブやモックを用意できます。
3. Stubをprotocolで作る例
まずはStubの例を見てみましょう。決まった返答を返すだけの代役です。
protocol UserService {
func fetchUserName() -> String
}
struct RealUserService: UserService {
func fetchUserName() -> String {
// 実際にはサーバー通信など
return "本物のユーザー名"
}
}
struct StubUserService: UserService {
func fetchUserName() -> String {
return "テスト用ユーザー"
}
}
テストではStubUserServiceを使うことで、サーバーに接続しなくても「テスト用ユーザー」という名前が返ってきます。
4. Mockをprotocolで作る例
次にMockの例です。呼ばれた回数や内容を記録できます。
class MockUserService: UserService {
private(set) var callCount = 0
func fetchUserName() -> String {
callCount += 1
return "モックユーザー"
}
}
// テスト例
let mock = MockUserService()
let name = mock.fetchUserName()
print(name) // "モックユーザー"
print(mock.callCount) // 1
モックユーザー
1
これで「fetchUserName()が1回呼ばれた」ということを確認できます。もし想定と違えばテストが失敗する仕組みを作れます。
5. 現実世界の例えで理解する
学校での練習試合を想像してください。本番の試合では本物の審判や観客がいますが、練習では「先生が審判役」をしても問題ありません。先生が「必ずOKを出す」ならそれはStubです。「どのプレーに何回笛を吹いたか」を数えるならMockです。どちらも本物の代役ですが、役割が少し違うのです。
Swiftでprotocolを使えば、このような「本番の代わり」を簡単に作り分けることができます。
6. 初心者が意識すべきポイント
初心者の方は、まず「本番用の処理」と「テスト用の処理」を分ける習慣を意識しましょう。protocolを使えば、処理の切り替えが簡単になり、テストもしやすくなります。実際のアプリ開発では「ネットワーク通信」「データベース保存」「外部サービス呼び出し」などにテストダブルをよく使います。
特にアプリが大きくなればなるほど、モックやスタブを正しく設計することが、品質を守る大切なポイントになります。
Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略
Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略
「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。
Windowsで実現する開発環境
【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。
【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。
この60分で得られる3つの理解
OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。
iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。
将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。
※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。
Windowsで始めるiPhoneアプリ開発入門