2009-07-10 3 views
0

TDDを使い始める前に、リポジトリ駆動型モデルを構築したいと思います。しかし、どのように私は効果的に言ってNUnitのを使用することができます。TDD - インタフェースの存在の有無

SomeInterfaceExists() 

を、私は、各ドメインモデルのテスト(例えばICarRepositoryIDriverRepository)などを作成したい)

これは実際には理にかなっていますか?あなたはTDDでテスト何かではありません

よろしく

答えて

4

TDDはあなたがユニットを作成します

  1. はあなたが
  2. をテストしたいクラスの概要(メソッド)を書く意味、テストファーストの方法で進めることによって、あなたの開発(設計)を駆動する意味あなたのユニットテストを実行して、あなたのクラスのスケッチ
  3. ためのテスト - >それは
  4. あなただけの十分なテストパス
  5. を作るためにあなたがあなたのクラス
  6. をリファクタリング、あなたのクラスをハックを失敗します

これは各項目について繰り返されます。

4

。テストでは、このクラスのインタフェースのメソッドの1つを呼び出すことができますし、それが正しいことを返すことができます。

+0

TDDを使用するのを見るたびに、彼らは鶏と卵のシナリオを行います。例えば。彼らは、このメソッドが存在するというテストを作成します。最初は赤で、次に実装します...期待された結果が得られなかった場合は、緑色になります。私がRepositoryをテストしたいのであれば、Interfaceが存在することをテストすることから始めるべきですか? –

+0

リンクを表示します。私はそれがばかげていると思う。 –

+1

さらに、「純粋な」TDDでは、あるインタフェースを作成することを前もって決めることはありません。あなたは失敗したテストを書くことから始めます。テストに合格するためにデータアクセスを行う必要がある場合、このパターンを使用することを決定した場合は、必要な1つの方法でインタフェースを作成します。次に、必要な1つのメソッドを実装するクラスを作成します。テストパス、リファクタ、リファクタ、繰り返しを参照してください。 –

0

ドメインオブジェクトにデータアクセスコードが必要ない場合はどうなりますか。ショッピングカートの一例?

2

は、次のような何か書くことができます:

void AssertSomeInterfaceExists(object domainObject) 
{ 
    Assert.IsTrue(domainObject is ICarRepository); 
} 

あなたがこのテストを書くことができ、誰かがもはやICarRepositoryを実装するために、あなたのドメインオブジェクトを変更した場合、それは後で失敗しますが。しかし、このインタフェースを実装するドメインオブジェクトに依存する他の単体テストはもはやコンパイルされず、このテストはやや冗長になります。

0

インターフェイスの存在を反映するためにリフレクションを使用できますが、それはTDDのアイデアを引き伸ばしているようです。

TDDは、特定のデザインパターンが適用されていると主張するのではなく、時間の経過とともに機能が保持されることを確認することです。 Juriが指摘するように、テストは絶対の最初のものではありません。

3

私はそれを実装するクラスをコンパイルしようとすると、インターフェイスの存在をコンパイラ 'テスト'(と私はそれがわかります)と言うでしょう。私は、何かを証明しないので、テストにおけるインターフェイスの存在を明示的にテストすることを期待しています。あなたはクラスが定義されているかどうかをテストしないで、クラスのメソッドをテストします。

1

インターフェイスが存在するかどうかをテストする必要はありません。あなたは実際にそこに何かを "テスト"しているわけではありません。

2

インターフェイスの存在は、テストでインターフェイスを使用するたびにテストされた暗黙のです。例えば、インタフェースまたはそのいずれかの実装が存在する前に、あなたは部分的に言うテストを書くかもしれません:

ICar car = new Convertible(); 

これはICARインタフェースの存在を確立します - それが作成されるまで、あなたのテストはコンパイルされません - そのコンバーチブルはICarを実装します。あなたが呼び出す車のすべてのメソッドは、より多くのインターフェイスを詳述します。

関連する問題