1

オブジェクトの特定のフィールドの値を変更して処理するコードを書いてきました。それをテストするために、まず、オブジェクトのフィールドを再帰的にトラバースし、それらが正しく変更されていることを確認する JUnit テスト ケースを作成しました。CUT (テスト対象のクラス) は、オブジェクトのフィールドを再帰的にトラバースし、必要に応じて変更します。

そのため、フィールドを再帰的にトラバースするコードは、テスト ケースと CUT で同じままであり、現在重複しており、DRY に反しています。だから私は2つの質問があります:

1) プロジェクトでそのような状況に遭遇したことがありますか? はいの場合、DRY を適用しましたか、またはそのような重複をそのまま残しましたか?

2) この共通コードを util メソッドに入れると、それをテストするためのテスト ケースを作成する必要があります。これには、フィールドを再帰的に走査することが含まれます。では、重複を追加せずにこれを解決するにはどうすればよいでしょうか?

4

2 に答える 2

4

アンチパターンをテストする醜いミラーにぶつかったところです。CUT にバグがある場合、ほとんどの場合、それをテスト ケースにコピーして、本質的にバグがまだ存在することを確認します。

もう少しコードを表示する必要がありますが、基本的にテスト ケースははるかに単純で、forループも条件もなく、アサーションのみである必要があります。運用コードが複雑なデータ構造に対して複雑なトラバース、リフレクションなどを行う場合は、テスト Java オブジェクトを作成し、単体テストですべてのフィールドを手動でテストします。

于 2012-05-28T07:50:45.707 に答える
1

ビジター パターンを使用してツリーのトラバースを抽象化し、テスト ケースと生産コードの両方でビジターを構築します。また、Visitor インフラストラクチャを個別にテストします。

于 2012-05-28T07:49:44.037 に答える