Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mock

776 views

Published on

  • Be the first to comment

Mock

  1. 1. モックについて 2013.01.1513年1月15日火曜日
  2. 2. テストダブルとは テストに使いづらいオブジェクトの代替 例: スタブ、モック、フェイク、スパイ どれもメソッドの差し替えを行う 目的が違う13年1月15日火曜日
  3. 3. モックとは テスト対象が適切なメソッド呼び出しを 行っているかを検証 相互作用の検証 (⇔ 状態の検証)13年1月15日火曜日
  4. 4. 例: メールシステム13年1月15日火曜日
  5. 5. 実装するためには… @Test public void メールを送る1() { mailServer.send("hello", "alice@example.com"); // assertThat(...) example.comへの送信をテストしたいが?? }13年1月15日火曜日
  6. 6. 実装するためには… @Test public void メールを送る1() { mailServer.send("hello", "alice@example.com"); // assertThat(...) example.comへの送信をテストしたいが?? } mailServer クラス自身 ではテストを書けない13年1月15日火曜日
  7. 7. 相互作用の対象を確認する @Test public void メールを送る2() { mailServer.send("hello", "alice@example.com"); assertThat(mailbox.getMail("alice").get(0), is("hello")); }13年1月15日火曜日
  8. 8. 相互作用の対象を確認する @Test public void メールを送る2() { mailServer.send("hello", "alice@example.com"); assertThat(mailbox.getMail("alice").get(0), is("hello")); } mailbox.getMailの実装 が必要13年1月15日火曜日
  9. 9. 相互作用の対象を確認する @Test public void メールを送る2() { mailServer.send("hello", "alice@example.com"); assertThat(mailbox.getMail("alice").get(0), is("hello")); } mailbox.getMailの実装 mailbox の実装が間違 が必要 っていたらエラー13年1月15日火曜日
  10. 10. 相互作用の対象を確認する @Test public void メールを送る2() { mailServer.send("hello", "alice@example.com"); assertThat(mailbox.getMail("alice").get(0), is("hello")); } mailbox.getMailの実装 mailbox の実装が間違 が必要 っていたらエラー そもそも mailbox.getMail は プロダクトに必要?13年1月15日火曜日
  11. 11. 例: メールシステム @Test public void メールを送る3() { mailServer.send("hello", "alice@example.com"); verify(mailbox).putMail("alice@example.com", "hello"); }13年1月15日火曜日
  12. 12. 例: メールシステム @Test public void メールを送る3() { mailServer.send("hello", "alice@example.com"); verify(mailbox).putMail("alice@example.com", "hello"); } mailbox.putMailのイン タフェースのみが必要13年1月15日火曜日
  13. 13. モックのメリット 簡潔な記述 テストの他クラスへの依存性の排除 インタフェースが用意されていれば良い テスト用コードの排除13年1月15日火曜日
  14. 14. 注意点13年1月15日火曜日
  15. 15. 自分の物だけをモックする モックは外部システムのシミュレートす る物ではない テストの複雑化 外部システムのAPIを直接触るのは避ける アダプターを用意する13年1月15日火曜日
  16. 16. TELL, DONT ASK デメテルの法則 これも依存性の排除のため getXXX().getYYY().getZZZ() // ← 隠れた依存性!13年1月15日火曜日

×