狠狠撸
Submit Search
Mock
?
2 likes
?
627 views
Motoi Washida
Follow
1 of 16
Download now
Download to read offline
More Related Content
Mock
1.
モックについて
2013.01.15 13年1月15日火曜日
2.
テストダブルとは
テストに使いづらいオブジェクトの代替 例: スタブ、モック、フェイク、スパイ どれもメソッドの差し替えを行う 目的が違う 13年1月15日火曜日
3.
モックとは
テスト対象が適切なメソッド呼び出しを 行っているかを検証 相互作用の検証 (? 状態の検証) 13年1月15日火曜日
4.
例: メールシステム 13年1月15日火曜日
5.
実装するためには… @Test
public void メールを送る1() { mailServer.send("hello", "alice@example.com"); // assertThat(...) example.comへの送信をテストしたいが?? } 13年1月15日火曜日
6.
実装するためには… @Test
public void メールを送る1() { mailServer.send("hello", "alice@example.com"); // assertThat(...) example.comへの送信をテストしたいが?? } mailServer クラス自身 ではテストを書けない 13年1月15日火曜日
7.
相互作用の対象を確認する @Test
public void メールを送る2() { mailServer.send("hello", "alice@example.com"); assertThat(mailbox.getMail("alice").get(0), is("hello")); } 13年1月15日火曜日
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.
相互作用の対象を確認する @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.
相互作用の対象を確認する @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.
例: メールシステム
@Test public void メールを送る3() { mailServer.send("hello", "alice@example.com"); verify(mailbox).putMail("alice@example.com", "hello"); } 13年1月15日火曜日
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年1月15日火曜日
14.
注意点 13年1月15日火曜日
15.
自分の物だけをモックする
モックは外部システムのシミュレートす る物ではない テストの複雑化 外部システムのAPIを直接触るのは避ける アダプターを用意する 13年1月15日火曜日
16.
TELL, DON'T ASK
デメテルの法則 これも依存性の排除のため getXXX().getYYY().getZZZ() // ← 隠れた依存性! 13年1月15日火曜日
Download