SlideShare a Scribd company logo
Reducing Test Code
Duplication
 テストの不吉な匂いの最たるものは、
  コードの重複
 テストコードの重複は、アサーションの
  繰り返しにあらわれる
Expected Object
 equalsメソッドで比較
 equalsメソッドをオーバーライドしたく
  ない場合は、DTOないしテスト特化サ
  ブクラスを用いる
 そうでないなら、カスタムアサーション
Custom Asserttions
 自分自身で書く、領域に特化したアサー
  ション
 テスト可能!
 二通りの方法がある
     既存のコードから、リファクタリングする。
     存在しないアサーションメソッドを呼ぶこ
    とによって、中を埋める
Outcome-Describing
Verificaton Method
 結果に対する検証を記述する
 カスタムアサーションとの違いは?
 →SUTに対する相互作用を持つこと
 カスタムアサーションは、等値性を検証
  するためのシグネチャを持つ
 検証メソッドは、SUTに渡すための任意
  のパラメータを持つ。
 カスタムアサーションとパラメータ化テ
  ストの中間
Parameterized and Data-
Driven Test
   Parameterized Test
     →テスト自動化フレームワークからは呼ば
      れない
     →パラメータが必要だから
   Data-Driven-Test
     フレームワークによって直接実行可能
     テストに特化したデータをファイルから読
     み込む
Avoiding Conditonal Test
Logic
 コードの重複とともににさけるべきなの
  は、条件判定のロジック。
 テストされないテストコードが発生する
  から
 条件判定のロジックが発生する理由
     アサーションを実行したくない
     実際の結果に、いくつかのシチュエーショ
      ンがある
     テストメソッドを、異なる状況で再利用し
      たい
Eliminating “if”
Statements
 テストが失敗したときに、より意味のあ
  るメッセージを出したいときに、どうす
  べきか?
 よくあるリアクションは、if文をいれる
  こと
 テストを走らせるたびに、同じコードが
  実行されない
 Guard Assertion(防護アサーション)を使
  う
Eliminating Loops
 条件判定のロジックは、ループとしてあ
  らわれることもある。
 以下の問題がある
     テストされないテストコードが生まれる
     わかりにくい(Obscure)なテストを招く
     開発者がテストを書かなくなる
    →テストユーティリティーメソッドで解決す
     る
Working Backward,Outside-In
 終わりからはじめる
 関数の結果を返すところから書き始める
 アサーションから書き始めることになる
Using test-Driven
Development to Write Test
Utility Methods
 テストユーティティーに対するテスト→
  テストユーティリティーテスト
 TDDは、テストユーティリティーメ
  ソッドの実装を最小限にするのに役立つ
 防護アサーションや、カスタムアサー
  ションが有効なので、一般的なロジック
  が入る余地はない
Where to Put Reuseable
Verification Logic?
 再利用可能なテストロジックはどこに置
  くか?
 もっとも的確なのは、テストケースのク
  ラス
 テストケースのスーパークラスにpull-up
  することもできる。
 Test Helperに移動することもできる。
 詳しくは12章で

More Related Content

More from Hiroyuki Ohnaka

VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
Hiroyuki Ohnaka
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
Hiroyuki Ohnaka
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
Hiroyuki Ohnaka
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
Hiroyuki Ohnaka
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
Hiroyuki Ohnaka
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
Hiroyuki Ohnaka
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
Hiroyuki Ohnaka
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
Hiroyuki Ohnaka
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
Hiroyuki Ohnaka
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
Hiroyuki Ohnaka
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
Hiroyuki Ohnaka
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
Hiroyuki Ohnaka
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Hiroyuki Ohnaka
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
Hiroyuki Ohnaka
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約
Hiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約
 

Chapter10 latest

  • 1. Reducing Test Code Duplication  テストの不吉な匂いの最たるものは、 コードの重複  テストコードの重複は、アサーションの 繰り返しにあらわれる
  • 2. Expected Object  equalsメソッドで比較  equalsメソッドをオーバーライドしたく ない場合は、DTOないしテスト特化サ ブクラスを用いる  そうでないなら、カスタムアサーション
  • 3. Custom Asserttions  自分自身で書く、領域に特化したアサー ション  テスト可能!  二通りの方法がある  既存のコードから、リファクタリングする。  存在しないアサーションメソッドを呼ぶこ とによって、中を埋める
  • 4. Outcome-Describing Verificaton Method  結果に対する検証を記述する  カスタムアサーションとの違いは?  →SUTに対する相互作用を持つこと  カスタムアサーションは、等値性を検証 するためのシグネチャを持つ  検証メソッドは、SUTに渡すための任意 のパラメータを持つ。  カスタムアサーションとパラメータ化テ ストの中間
  • 5. Parameterized and Data- Driven Test  Parameterized Test  →テスト自動化フレームワークからは呼ば れない  →パラメータが必要だから
  • 6. Data-Driven-Test  フレームワークによって直接実行可能  テストに特化したデータをファイルから読 み込む
  • 7. Avoiding Conditonal Test Logic  コードの重複とともににさけるべきなの は、条件判定のロジック。  テストされないテストコードが発生する から  条件判定のロジックが発生する理由  アサーションを実行したくない  実際の結果に、いくつかのシチュエーショ ンがある  テストメソッドを、異なる状況で再利用し たい
  • 8. Eliminating “if” Statements  テストが失敗したときに、より意味のあ るメッセージを出したいときに、どうす べきか?  よくあるリアクションは、if文をいれる こと  テストを走らせるたびに、同じコードが 実行されない  Guard Assertion(防護アサーション)を使 う
  • 9. Eliminating Loops  条件判定のロジックは、ループとしてあ らわれることもある。  以下の問題がある  テストされないテストコードが生まれる  わかりにくい(Obscure)なテストを招く  開発者がテストを書かなくなる →テストユーティリティーメソッドで解決す る
  • 10. Working Backward,Outside-In  終わりからはじめる  関数の結果を返すところから書き始める  アサーションから書き始めることになる
  • 11. Using test-Driven Development to Write Test Utility Methods  テストユーティティーに対するテスト→ テストユーティリティーテスト  TDDは、テストユーティリティーメ ソッドの実装を最小限にするのに役立つ  防護アサーションや、カスタムアサー ションが有効なので、一般的なロジック が入る余地はない
  • 12. Where to Put Reuseable Verification Logic?  再利用可能なテストロジックはどこに置 くか?  もっとも的確なのは、テストケースのク ラス  テストケースのスーパークラスにpull-up することもできる。  Test Helperに移動することもできる。  詳しくは12章で