モックとスタブ

中級
30
3時間

RSpecのモックとスタブに関する練習問題

RSpecコースの一部として、モックとスタブに関する実践的な練習問題を30問用意しています。 基礎から応用まで段階的に学習できるよう構成されています。

学習を開始する準備ができました

下記の練習問題から始めて、段階的にスキルアップしていきましょう

rspec icon

練習問題一覧 (30問)

問題 1

スタブで例外を発生させるために使用するメソッドは何ですか?

問題 2

以下のコードの実行結果はどうなりますか? ```ruby allow(Time).to receive(:now).and_return(Time.new(2024, 1, 1)) current_time = Time.now puts current_time.year ```

問題 3

`instance_double`を使用することで、チーム開発において期待できる効果は何ですか?

問題 4

コンストラクタインジェクションを使用する理由として最も適切なものはどれですか?

問題 5

`instance_double`で連続して異なる値を返すように設定するには、どの方法を使用しますか?

問題 6

RSpecで`instance_double`を作成する正しい構文はどれですか?

問題 7

以下のコードで`instance_double`を使用する際の注意点は何ですか? ```ruby class DatabaseService def save_record(data, options = {}) # 保存処理 end end db_service = instance_double(DatabaseService) expect(db_service).to receive(:save_record).with('test_data') ```

問題 8

以下のコードで`instance_double`の役割として正しいものはどれですか? ```ruby email_service = instance_double(EmailService) allow(email_service).to receive(:deliver_welcome_mail).and_return(true) ```

問題 9

メソッドが呼び出されないことを検証するRSpecの書き方はどれですか?

問題 10

RSpecの`instance_double`を使用する主な利点は何ですか?

問題 11

スタブで指定した値を返すために使用するメソッドは何ですか?

問題 12

以下のコードで、メソッドが1回だけ呼び出されることを検証するにはどうすればよいですか? ```ruby expect(email_service).to receive(:send_welcome_mail).with('test@example.com') ```

問題 13

RSpecの`subject`を使用することで得られる効果は何ですか?

問題 14

RSpecの`instance_double`でメソッドの返り値を設定する正しい方法はどれですか?

問題 15

以下のコードで商品ID 456を指定した場合の返り値は何になりますか? ```ruby stock_service = instance_double(StockService) allow(stock_service).to receive(:fetch_stock_quantity).with(123).and_return(50) allow(stock_service).to receive(:fetch_stock_quantity).with(456).and_return(10) result = stock_service.fetch_stock_quantity(456) ```

問題 16

モックを使ったテストが最も適している場面はどれですか?

問題 17

以下のコードで`purchase`メソッドの返り値は何になりますか? ```ruby stock_service = instance_double(StockService) allow(stock_service).to receive(:fetch_stock_quantity).and_return(30) purchase_manager = PurchaseManager.new(stock_service) result = purchase_manager.purchase(123, 25) ```

問題 18

以下のコードでdoubleメソッドを使ってモックオブジェクトを作成する正しい書き方はどれですか?

問題 19

RSpecにおける「モック」と「スタブ」の違いについて正しい説明はどれですか?

問題 20

以下のコードで使われているRSpecの技法は何ですか? ```ruby allow(user_service).to receive(:find_by_email).and_return(user) ```

問題 21

スタブとモックの主な違いとして正しいものはどれですか?

問題 22

スタブの主なメリットとして**間違っている**ものはどれですか?

問題 23

RSpecの`let`を使用する主な利点は何ですか?

問題 24

通常の`double`と`instance_double`の主な違いは何ですか?

問題 25

以下の状況で`instance_double`が最も効果的なのはどのような場面ですか?

問題 26

外部APIのテストでスタブを使う主な理由として**最も適切でない**ものはどれですか?

問題 27

以下のスタブの設定で、`service.fetch_data`を呼び出したときの動作はどうなりますか? ```ruby allow(service).to receive(:fetch_data).and_return('data1', 'data2', 'data3') ```

問題 28

RSpecでスタブを作成する際に使用するメソッドは何ですか?

問題 29

以下のコードで`instance_double`を使用した場合、どのような結果になりますか? ```ruby class UserService def create_user(name) # ユーザー作成処理 end end # テストコード user_service = instance_double(UserService) expect(user_service).to receive(:register_user).with('田中') ```

問題 30

`instance_double`の初期化時にメソッドの返り値を設定するには、どの構文を使用しますか?

💡 学習のコツ

  • • 順番に取り組むことで、段階的に理解を深めることができます
  • • 間違えた問題は解説をしっかり読んで理解しましょう
  • • 全問題完了後、もう一度チャレンジして定着を確認しましょう

📚 学習の進め方

1

問題を順番に解く

基礎から応用へと段階的に構成されているため、順番に取り組むことをお勧めします

2

解説をしっかり読む

正解・不正解に関わらず、解説を読んで理解を深めましょう

3

復習で定着させる

間違えた問題は後日再チャレンジして、知識の定着を確認しましょう

前のトピック

マッチャー

次のトピック

モデルテスト

さらに効果的な学習を

プレミアムプランでは、進捗管理、間違えた問題の自動復習リスト、詳細な解説動画など、 より充実した学習体験をご利用いただけます。