2010-12-14 6 views
4

私はまだTDDの概念全体を把握しています。私はプロパティのテストを書く必要がありますか?十分なロジックを含むプロパティのテストのみを書くべきでしょうか?これに関する考えや例は素晴らしいでしょう。テストプロパティを単位にするのは良い方法ですか?

+1

プロパティの意味を詳しく説明できますか?論理を持つプロパティは何ですか?原則として ;もし、あるメソッドが間違っているロジックを含んでいれば、それは単体テストの価値があるのですが、単体テストの作成には時間がかかりますか(通常はユニットテストで時間が節約できますが、これには) – JohnSmith

+0

プロパティを持つことはまったく良い習慣ではありません。メソッドが何もしない場合、それはなぜ存在するのですか?なぜ、他のクラスはフィールド値を使ってこのクラスにフィールド値を要求しますか? http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.htmlを読んでください - ゲッターとセッターは普遍的に悪ではありませんが、彼らはひどく乱用されています。何かがとても単純かどうかはテストされるべきではなく、何かがとても単純であるかどうかを尋ねるのは、存在してはいけないということです。 –

+1

Tom @それは多少議論の余地があり、カプセル化の面で飛んでいるようです。あなたは本当に小道具を持たないことを主張していますか、あるいは単にテストに関して言及していますか? – hoakey

答えて

4

プライベートフィールドのパブリックゲッターのテストを書くことで、このゲッターがプライベートフィールドを返す以外は何もしない場合にはあまり役に立ちません。しかし、それが何らかのロジックを含んでいたり(あるいは、Int32フィールドをByteに変換するのに失敗するだけの場合)、そのようなプロパティをテストすることは意味をなさないでしょう。

+1

okだから、範囲を確認したら、テストを書くように言われますか? – hoakey

+0

範囲をどのくらい正確に確認するかによって異なります。範囲チェックが失敗する可能性がある場合(範囲外のインデックス、NULLポインタ例外など)、テストを作成します。あなたのコード:) –

1

テストとして考える代わりに、誰かがあなたのコードをどのように使用できるかの例として、各テストを考えてみてください。

プロパティをテストするだけでなく、プロパティの値が異なるときに変更される動作について考え、それぞれの意味のあるコンテキストでクラスの動作の例を挙げます。

本当に単なるデータプロパティの場合は、検査によって、または自動受諾テストで、または手動で、テスターのヘルプによってテストできます。それ以外の場合は、各メソッドまたは各プロパティのテストについて心配する必要はありません。コードをどのように使用できるか、またどのように動作させるかを示してください。

2

私は通常、アクセサのjunitテストを記述します。カバレッジ統計をきれいに保つことを除いて、書かれているときはそれほど多くはありません。しかし、後で誰かが "十分なロジック"を生産コードに追加した場合、テストはすでに間違いを犯すために適切な位置に置かれます。

ゲッターから返された値をチェックするテストを書くのも瞬間です。

4

合理的な失敗の可能性があるものをテストします。get/set以外のロジックがないプロパティをテストすることによって、余計な信頼を得ることはありません。

+0

私が念頭に置いておくべきことは、値の範囲、すなわち> 6 <12をチェックすることです。この些細な事柄が良い習慣を追求してテストされるべきか、これは細かいものとみなされるべきか? – hoakey

+1

あなたは "プロパティ"をテストしていませんが、特定のロジックをテストしています/要件が満たされているようです。それは何かがそれを壊すまで些細なことです。 –

+1

「きめ細かい」というようなものはありません。要点は、常にプロジェクトの堅牢性の向上とテストライティングのバランスをとることです。名目上「int」であるが実際にそのタイプの部分範囲に限定されたプロパティは、非常に特殊で壊れやすいものであり、徹底的なテストによって絶対に裏付けされるべきである。 –

0

TDDとユニットテストは「先を見てください」と考えると、あなたのクラスの公開署名になると感じるような方法でテストを書くことができます。

4

簡単な経験則TDDを実行するときに使用します。常に失敗するテストを書きます。

最初にテストが失敗した場合、それはTDDの良いテストです。何かがまだ実装されていないか、実装されていないことを意味します。その後、コードを変更して合格させることができます。最初に成功したテストは悪いテストです。あなたがテストを書く間違いをしたか、テストしているものがすでに働いているので、成功したかどうかは分かりません。

プロパティを使用してテストエラーを生成できる場合は、それらのプロパティのテストを記述します。典型的には、セッターやゲッターを実装する前にテストを書くことから始めるべきです。実装されていないセッターやゲッターは些細なものに見えるかもしれませんが、テストは失敗します。そして、なぜ、がテスト失敗によってになるのでなければ、セッターやゲッターでもコードの行を書くことはできますか?

その他の種類のテストは、APIを使用する方法を示すドキュメントとしてのテストと同様に、非常に便利で優れたアジャイルなプラクティスですが、TDDではありません。 TDDは、を積極的にしようとしています。その後、機能テストを実行し、単体テストを十分に強く押しても、統合やシステムに問題がない場合は、すべて正常でなければなりません。

関連する問題