#xutp Chapter10(latest)

12

Click here to load reader

Transcript of #xutp Chapter10(latest)

Page 1: #xutp Chapter10(latest)

Reducing Test Code Duplication

テストの不吉な匂いの最たるものは、コードの重複

テストコードの重複は、アサーションの繰り返しにあらわれる

Page 2: #xutp Chapter10(latest)

Expected Object

equalsメソッドで比較

equalsメソッドをオーバーライドしたくない場合は、DTOないしテスト特化サブクラスを用いる

そうでないなら、カスタムアサーション

Page 3: #xutp Chapter10(latest)

Custom Asserttions

自分自身で書く、領域に特化したアサーション

テスト可能!

二通りの方法がある

既存のコードから、リファクタリングする。

存在しないアサーションメソッドを呼ぶことによって、中を埋める

Page 4: #xutp Chapter10(latest)

Outcome-Describing Verificaton Method 結果に対する検証を記述する

カスタムアサーションとの違いは?

→SUTに対する相互作用を持つこと

カスタムアサーションは、等値性を検証するためのシグネチャを持つ

検証メソッドは、SUTに渡すための任意のパラメータを持つ。

カスタムアサーションとパラメータ化テストの中間

Page 5: #xutp Chapter10(latest)

Parameterized and Data-Driven Test Parameterized Test

→テスト自動化フレームワークからは呼ばれない

→パラメータが必要だから

Page 6: #xutp Chapter10(latest)

Data-Driven-Test

フレームワークによって直接実行可能

テストに特化したデータをファイルから読み込む

Page 7: #xutp Chapter10(latest)

Avoiding Conditonal Test Logic コードの重複とともににさけるべきなの

は、条件判定のロジック。

テストされないテストコードが発生するから

条件判定のロジックが発生する理由 アサーションを実行したくない

実際の結果に、いくつかのシチュエーションがある

テストメソッドを、異なる状況で再利用したい

Page 8: #xutp Chapter10(latest)

Eliminating “if” Statements

テストが失敗したときに、より意味のあるメッセージを出したいときに、どうすべきか?

よくあるリアクションは、if文をいれること

テストを走らせるたびに、同じコードが実行されない

Guard Assertion(防護アサーション)を使う

Page 9: #xutp Chapter10(latest)

Eliminating Loops

条件判定のロジックは、ループとしてあらわれることもある。

以下の問題がある

テストされないテストコードが生まれる

わかりにくい(Obscure)なテストを招く

開発者がテストを書かなくなる

→テストユーティリティーメソッドで解決する

Page 10: #xutp Chapter10(latest)

Working Backward,Outside-In

終わりからはじめる

関数の結果を返すところから書き始める

アサーションから書き始めることになる

Page 11: #xutp Chapter10(latest)

Using test-Driven Development to Write Test Utility Methods テストユーティティーに対するテスト→

テストユーティリティーテスト

TDDは、テストユーティリティーメソッドの実装を最小限にするのに役立つ

防護アサーションや、カスタムアサーションが有効なので、一般的なロジックが入る余地はない

Page 12: #xutp Chapter10(latest)

Where to Put ReuseableVerification Logic?

再利用可能なテストロジックはどこに置くか?

もっとも的確なのは、テストケースのクラス

テストケースのスーパークラスにpull-up

することもできる。

Test Helperに移動することもできる。

詳しくは12章で