このテストではインターフェイスを抜粋し、インターフェイスがIsRunning
というブールゲッターを公開していることを確認しています。
このテストは、interface
が存在する前に書かれている可能性があり、おそらくIGame
の具体的なクラスのいずれかが存在する前に書かれている可能性があります。プロジェクトが成熟していれば、実際の実装を行い、そのレベルの動作を検証する他のテストがあり、おそらく理論的な形をスタブするのではなく、より伝統的な分離主義的なコンテキストでモックを使用すると思います。
これらの種類のテストの価値は、形状やオブジェクトがどのように使用されるかを考えるように強制することです。 「ゲームがまだ何をしようとしているのか正確にはわかりませんが、実行中かどうかを確認したいと思っています...」という行に沿ったものです。このテストスタイルは、設計の決定を促し、動作を検証するためのものです。
私の意見では、地球上で最も貴重なテストではありませんが、その目的を果たしています。
編集:私はこれを入力していた昨晩電車に乗っていましたが、答えに直接Andrew Whitakerのコメントを書いたかったのです。
インタフェース自体のシグネチャが、希望する契約の実施に十分であると主張できます。ただし、これは実際にインターフェイスをどのように扱うか、最終的にテストしようとしているシステムの検証方法によって異なります。
明示的にこの機能をテストとして示す際には、具体的な値が存在する可能性があります。これがIGame
の望ましい機能であることを明示的に確認しています。
あなたはIsRunning
のパブリックゲッターを公開したいと思うことをデザイナーが知っているので、インターフェースに追加することができます。しかし、別の開発者がこれを取得してプロパティを見ることはできますが、コード内の他の場所でその用途を見ることはできません。削除の対象となるかもしれません(通常は良いことです)害を与えずに。しかしながら、この試験の存在は、この正当性が存在すべきであることを明示している。
このテストがなければ、開発者はインタフェースを変更して実装を破棄することができ、プロジェクトはまだコンパイルされ、一見正しく実行されます。そして、後で誰かがインタフェースが変更されたことに気付くはずです。
このテストでは、誰もそれを使用していないかのように見えても、テストスイートは失敗します。テストの自己文書化の性質は、IGame
が実際にIsRunning
ゲッターを公開する必要がある場合、少なくとも会話を生成するはずのShouldReturnGameIsRunning()
を示しています。
予想通りMOQ通常休みはこの無意味ではありません動作することを証明しています。 – sarnold
この質問には2つの異なることがあります。「TDDの目的は何ですか? 「このテストのポイントは何ですか?」 - あなたの頭の中に2つの別々のものを保つように注意してください。 TDDの価値は、単一の(おそらく貧弱な)テストから公正に判断することはできません。 – Bevan
私はこれをhttp://stackoverflow.com/questions/tagged/tdd?sort=votes&pagesize=50の複製としてクローズすることができます。 –