1

私が取り組んでいるプロジェクトの一部として、読み取り専用の DAO (Bill クラス) があります。プロジェクト自体は、データベースでまだ表されていない Bill の新しいインスタンスを作成してはならず、この Bill クラスの値を変更または更新してはなりません。そのため、Bill インスタンスの偶発的な変更を防ぐために、すべてのコンストラクターとプライベートであり、セッターはありません (Hibernate はデータベースからの請求書データを Bill インスタンスにマーシャリングするために使用され、パブリック コンストラクターとセッターの不足に悩まされることはありません)。

今質問に:

統合テストの一環として、私たちのプロジェクトはデータベースに表示されていない新しい請求書オブジェクトを決して作成しないという原則に違反する必要があります。テストの目的のためだけに、この原則に違反する最善の方法は何ですか?

リフレクション ベースのビルダー:私が提案した 1 つのアイデアは、リフレクション ベースのビルダーを使用して、Bill クラスのコードを変更する必要がないようにすることです。請求クラスが間違っているとすぐに特定されます。

パッケージ プライベート コンストラクター:私の上司が提案した代替案は、ビルダーが使用できるパッケージ プライベート コンストラクターを含めることです。これには、ビルダーが機能することを確認するためのテストが少なくて済み、単純であるという利点があります。ただし、これに対応するには、メイン コード ベースに明示的なコードが必要です。

私たちのどちらも、どちらの考えにもあまり熱心ではありません。だから私は、他の誰かが以前に同様の問題に対処しなければならなかったかどうか、そして彼らがどのように対処したか疑問に思っていました. 「アジャイル テスト: テスターとアジャイル チームのための実践ガイド」をよく読んでいますが、これまでのところ関連するものは見つかりませんでした。

注意。請求書は DAO の複雑な階層 (データベース内の外部キー制約を含む) の一部であるため、データベースと直接やり取りするほど単純ではありません。そのため、このような階層を迅速かつ簡単に作成し、このすべてのデータをデータベースに永続化できるビルダーが望ましいです。

4

2 に答える 2

1

Can you create a MutableBill class that is kept in your test source tree and is mapped to the same table as your Bill class?

Then your test code could populate the DB (for example HSQLDB) at the beginning of the test run using MutableBill and the rest of your code could continue using the immutable Bill.

于 2012-08-12T21:12:07.377 に答える
0

これらの2つから選択する必要がある場合は、デフォルトの可視性コンストラクターを使用します。リフレクションベースのプログラミングは、理解しにくいコードを作成しますが、まったく単純なコードではありません。IDEの検索参照は正しく機能しないため、誰かがデッドコードに直面していると思うかもしれません。次に、実行時にすべてが壊れていることがわかります。

徹底的なテストがより望ましいので、そのような追加(パッケージの私的なものとして)は受け入れられます。

于 2012-09-02T17:40:04.577 に答える