2011-10-28 10 views
4

私はCoberturaによって監視されているJUnitテストを実行するantビルドがあるJavaプロジェクトに取り組んでいます。それは素晴らしい作品であり、私たちはカバレッジを非常に高く保ちました。 Hibernateエンティティのようないくつかのクラスでは、最小限のコードを持っていますが、equalsメソッドとhashCodeメソッドがあります。それらをテストすることは大きな痛みであり、カバレッジのパーセンテージを引き下げます。私たちはEqualsVerifierを使ってみましたが、2つのクラスは互いに参照を持ちます。これはHibernateエンティティで頻繁に発生します。Javaコードカバレッジのアイデア?

Commons EqualsBuilderの使用を検討しましたが、IDEでequals/hashCodeメソッドを自動生成する機能がなくなりました。私はEqualsBuilderもリフレクションを通して行うことができますが、ビルドタイム単体テストのカバレッジのためだけにランタイムパフォーマンスを失いたくはありません。

CoberturaにequalsメソッドとhashCodeメソッドを無視するように指示するのが理想的な状況ですが、そこからのパッチではクラスに注釈を付ける必要があります。

私は他の人のアイデアが、そのような場合にうまくいくかどうかについて考えています。誰にもこれをどうやって行うのかについてのアイデアはありますか?

ありがとうございます!

答えて

5

equalsとhashCodeのどちらも重要ではないので、その場合は、<コードカバレッジメトリックを無視するか、メソッドを無視する方法を見つけてください。それとも重要なのですか?ユニットテストを書いてそれらを実行するべきです。それは楽しいことではないかもしれませんが、これらの方法が適切に機能するかどうか気になるようです。その場合、おそらくそれらをテストする必要があります。

+0

私はすべてのコードをテストすることに同意します。精神的な闘争は、これらのテストの手動コーディングによるものです。この場合、equalsメソッドは自動生成され、正しいです。したがって、テストは使用されたアルゴリズムのテストです。非常に多数のブランチが含まれているので、テストはオブジェクトをいくつかのものに設定する一連の組み合わせ、または各ブランチの各側をカバーするヌルです。 おそらく最後に、私に最も適したものは、お互いを参照するクラスを許可するためにEqualsVerifierにパッチを提出することでしょう。 –

+0

彼らは作成された時点で「正しい」が、他のメンバー変数をオブジェクトに追加した直後ですか?それは私が心配することになるだろう。 –

1

テストする価値がない場合は、最初にコードを書く価値がありません。

つまり、等価コードとハッシュコードメソッドをプロダクションコードのどこでも使用する場合、にはコード範囲が必要です。それと同じくらい簡単です。それ以外の場合はバグが発生します。私を信じて、になります。

そして、「それらをテストすることは大きな苦痛です」テストをあきらめる理由ではありません。巨大な痛みは通常大きな努力として現れますが、長期的にはそれに見合った価値があります。

関連する問題