LoginSignup
1
1

More than 3 years have passed since last update.

TDD(テスト駆動開発)の流れとテスティングパターンをまとめる

Posted at

テスト駆動開発(TDD)の流れ

  1. まずはテストを1つ書く
  2. 全てのテストを走らせ、新しいテストの失敗を確認する
  3. 小さな変更を行う
  4. 全てのテストを走らせ、全て成功することを確認する
  5. リファクタリングを行って重複を除去する

ティスティングのパターン

Mock Object パターン

構築処理が重かったり、準備に手間がかかったりするようなリソースに依存したオブジェクトをテストする時に、決められた結果を返す、偽物のオブジェクトに代わりの作成する。

Self Shunt パターン

オブジェクトが他のオブジェクトときちんとやりとりしていることをテストしたい時は、テスト対象オブジェクトが本物だと思って話している相手が実はテストケース自身となるようなテストを書く

Log String パターン

正しい順序でメソッド呼び出しが行われていることをテストしたい時に、記録用文字列を作り、メソッド呼び出しの旅にその文字列に追記する。

Crash Test Dummy パターン

エラー処理部分のコードをテストする時に、普通にテストから叩き、例外を発生される特別のオブジェクトを使うようにする。

テストに関係があるデザインパターン

Command パターン

処理の呼び出しが、シンプルなメソッド呼び出しよりも複雑になってきた時、処理のためのオブジェクトを作成し、それを起動するようにする。

Value Objectパターン

広く共有されるものの、同一インスタンスであることをさほど重要でないオブジェクトを設計する時、オブジェクト作成時に状態を設定したら、その後決して変えないようにする。オブジェクトへの操作は必ず新しいオブジェクトを返すようにする。

Null Object パターン

特殊の状況をオブジェクトで表現する時、特殊な状況を表すオブジェクトを作り、通常のオブジェクトと同じプロトコル(メソッド群)を実装しよう。

Template Method パターン

処理の順序だけを規定し、拡張は将来に向けて開かれた状態にする時、他のメソッドを順番に呼び出すだけのメソッドを書く。

Pluggable Object パターン

バリエーションは表現するには、最もシンプルなのは、明示的な条件分岐を使う方法。

Pluggable Selector パターン

インスタンスごとに異なる振る舞いをさせるには、メソッド名を格納しておき、そのメソッドを動的に起動する。

Factory Methodパターン

オブジェクト作成に柔軟性を持たせたい時は、単にコンストラクタで作るのではなく、メソッドを使ってオブジェクトを作成する。

Imposterパターン

処理に新しいバリエーションを導入する時は、既存オブジェクトと同じプロトコルを携え、実装は異なる新たなオブジェクトを作る。

Compositeパターン

オブジェクトたちの振る舞いを組み合わせた振る舞いを持つオブジェクトを実装する時、構成要素をまとめたImposterを作る。

Collecting Parameter パターン

たくさんのオブジェクトたちの処理結果を集める時、処理のパラメータに結果格納用のオブジェクトを渡す。

参考

テスト駆動開発

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1