2

3つのフィールドを持つJavaクラスがあります。要件の変更により、必要なのは2つだけであることに気付きました。

理想的には、コードを変更する前に、失敗するテストケースを作成します。

標準的な方法はありますか、それともこのタスクではTDDを無視する必要がありますか?

4

5 に答える 5

3

このフィールドを削除すると、クラスの動作が変わりますか?そうでない場合は、フィールドをドロップして、クラスがまだ正しく機能するかどうかを確認します(つまり、すでに作成したはずのテストに合格します)。
TDDの原則は、「テストによって設計された」コードを作成することです。これはばかげているように聞こえるかもしれませんが、最初に作成する必要があるクラスはテストクラスであり、テスト対象のクラスの動作をテストすることを意味します。いくつかの手順を繰り返す必要があります。

  1. テストを書きます。コンパイルしないでください(テスト中のクラスがありません)
  2. テストをコンパイルします。失敗するはずです(テストのアサーションを満たさない空のクラスがあるだけです)
  3. 最も簡単な方法でテストに合格します(通常は、テストしているメソッドを作成して期待値を返します)
  4. テスト対象のクラスを調整/リファクタリング/一般化し、テストを再実行します(まだ合格しているはずです)。このステップは非常に速く、通常2分未満である必要があります。
  5. 目的の動作がほぼ自然に現れるまで、手順2から繰り返します。
于 2013-03-26T09:40:32.090 に答える
3

これはリファクタリングなので、失敗したテストから始める必要はありません。

  1. フィールドを使用してすべてのメソッドを検索します。
  2. それらが単体テストでカバーされていることを確認してください。
  3. メソッドをリファクタリングして、フィールドを使用しないようにします。
  4. フィールドを削除します。
  5. テストが実行されていることを確認します。
于 2013-03-26T09:43:26.880 に答える
1

必要なすべてのフィールドの完全なリストがある場合は、リフレクションによってそのフィールドのリストを比較できます。

yourClassName.getClass().getDeclaredFields() vs your list of fields
于 2013-03-26T09:39:08.077 に答える
1

削除するフィールドを指定せずに、コンストラクターのテストを記述します。

明らかに、コンストラクターがフィールドの値をパラメーターとして受け取る場合にのみ機能します。

于 2013-03-26T10:11:02.710 に答える
1
  • 削除された機能をカバーするすべてのテストを削除します(これは、TDDの3つのルールに従って「本番コードの記述」としてカウントされません)。

  • 残りのテストで廃止されたフィールドへのすべての参照を削除します。それらのいずれかが失敗した場合、それを成功させるために必要な本番コードを書くことができます。

  • テストが再び緑色になると、それ以降のすべての変更は「リファクタリング」カテゴリに分類されます。ここで(現在は使用されていない)フィールドを削除できます。

于 2013-03-26T15:41:52.357 に答える