テストプロジェクトを作成し、いくつかのテストメソッドを作成することはTDDの一種ですが、既知のAPIがあり、メソッド呼び出しがユーザーが期待するものに直接対応しているライブラリで作業している場合を除いて、これはあまり役に立ちません。テストの適切なリストを作成する必要があります。重要なアプリケーションの場合、それを実行するのは非常に難しい場合があります。
私はSpecFlowを試すことをお勧めします。テストを実装から適切に分離し続け、機能ファイルの構造により、実際にテストしているものについて考えることを強いられます。
機能を定義するときは、次のように書くだけです。
When a user is saved
Then the user should exist
この時点ではコードファイルを使用していないので、ユーザーを作成するために呼び出されるメソッドや、それが実装されているクラスなどの実装の詳細について考える気になりません。タグを使用して、さまざまな実装を選択できます。したがって、このレベルでは、「ユーザーが保存されている」がCreateUserの呼び出しを意味するか、ブラウザを開いてフォームを送信するかは関係ありません。
機能を定義すると、すべてのテストが生成され、テストされるステップ定義と実際のアプリケーションコードを実装するときに合格します。
単純なアプリの場合は、機能ファイルを作成するだけですが、より複雑な場合は、事前に完全な仕様をまとめておくと便利です。私はiPadのマインドマッピングアプリを使用していますが、最も使いやすいツールであれば何でも使用できます。
「ユーザー登録」のような高レベルの機能のリストから始めます。これらは幅が広すぎて直接テストを作成できない傾向があるため、明確に定義できるサブ機能に分割し、一般に「ユーザーの保存」や「既存のユーザーの表示」などの特定のユーザーアクションにマッピングします。
これらの各サブ機能には、「有効なユーザーを保存できる」や「ユーザー名が重複しているユーザーを保存できない」など、機能が動作しているかどうかを完全に定義するシナリオのリストが必要です。
このリストを作成すると、通常、構造を調整する必要がある場所が明らかになります-機能のシナリオテストを思い付かない場合、または1つの機能に多すぎる場合、その機能はおそらく次の場所で定義されます。間違ったレベルであり、分割または変更する必要があります。