SlideShare a Scribd company logo
1 of 12
Download to read offline
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

Viewers also liked

Xue project 1_presentation
Xue project 1_presentationXue project 1_presentation
Xue project 1_presentationCynthia Lin
 
XVI Ежегодные Пашкусовские чтения
XVI Ежегодные Пашкусовские чтенияXVI Ежегодные Пашкусовские чтения
XVI Ежегодные Пашкусовские чтенияvarlamovdenis
 
Xxx olympic games schedule by discipline
Xxx olympic games schedule by disciplineXxx olympic games schedule by discipline
Xxx olympic games schedule by disciplinegunforglory
 
Xotelia - Top 8 Vacation Rental Website Mistakes To Avoid
Xotelia -  Top 8 Vacation Rental Website Mistakes To AvoidXotelia -  Top 8 Vacation Rental Website Mistakes To Avoid
Xotelia - Top 8 Vacation Rental Website Mistakes To AvoidJeffrey Messud
 
XtractEnergy_RandA_2008
XtractEnergy_RandA_2008XtractEnergy_RandA_2008
XtractEnergy_RandA_2008Andy Morrison
 
Xsteel teknigi
Xsteel teknigiXsteel teknigi
Xsteel teknigisersld85
 
XVl Congresso del CLAD, Asunción, Paraguay, 2011
XVl Congresso del CLAD, Asunción, Paraguay, 2011XVl Congresso del CLAD, Asunción, Paraguay, 2011
XVl Congresso del CLAD, Asunción, Paraguay, 2011Ethel Capuano
 
Xsteel notlari
Xsteel notlariXsteel notlari
Xsteel notlarisersld85
 

Viewers also liked (10)

Xue project 1_presentation
Xue project 1_presentationXue project 1_presentation
Xue project 1_presentation
 
XVI Ежегодные Пашкусовские чтения
XVI Ежегодные Пашкусовские чтенияXVI Ежегодные Пашкусовские чтения
XVI Ежегодные Пашкусовские чтения
 
Xxx olympic games schedule by discipline
Xxx olympic games schedule by disciplineXxx olympic games schedule by discipline
Xxx olympic games schedule by discipline
 
Xotelia - Top 8 Vacation Rental Website Mistakes To Avoid
Xotelia -  Top 8 Vacation Rental Website Mistakes To AvoidXotelia -  Top 8 Vacation Rental Website Mistakes To Avoid
Xotelia - Top 8 Vacation Rental Website Mistakes To Avoid
 
XXV Semana del Libro Melilla
XXV Semana del Libro MelillaXXV Semana del Libro Melilla
XXV Semana del Libro Melilla
 
XtractEnergy_RandA_2008
XtractEnergy_RandA_2008XtractEnergy_RandA_2008
XtractEnergy_RandA_2008
 
XRF / Si has begut o consumit drogues, no agafis la moto
XRF / Si has begut o consumit drogues, no agafis la motoXRF / Si has begut o consumit drogues, no agafis la moto
XRF / Si has begut o consumit drogues, no agafis la moto
 
Xsteel teknigi
Xsteel teknigiXsteel teknigi
Xsteel teknigi
 
XVl Congresso del CLAD, Asunción, Paraguay, 2011
XVl Congresso del CLAD, Asunción, Paraguay, 2011XVl Congresso del CLAD, Asunción, Paraguay, 2011
XVl Congresso del CLAD, Asunción, Paraguay, 2011
 
Xsteel notlari
Xsteel notlariXsteel notlari
Xsteel notlari
 

More from Hiroyuki Ohnaka

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い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
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescriptHiroyuki 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 #tddbcHiroyuki 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
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
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移行事例~
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 

#xutp 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章で