Mock

725 views
628 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
725
On SlideShare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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日火曜日

×