2011-01-18 8 views
4

私はアセスメントメソッドを持つサブスクリプションクラスを持っています。 このメソッドはこのサブスクリプションの計画を(モデルとして)取得します。 サブスクリプションでは、最後の請求日から請求されなかった料金を含む請求書オブジェクトが作成されます。複数のクラスを含む単体テストロジック

私はこのメソッドをテストしたいと思いますが、これは単体テストではないと思われます。なぜなら、依存性の異なる多くのオブジェクトが含まれているからです。

このメソッドをどのようにテストしますか?

+3

は、あなたが 'を意味するものではありません。よろしいです評価方法? 'asses'メソッドはちょっと間違っています;-) –

+0

頭のおかげでありがとう:) –

答えて

10

純粋主義者のための単体テストではありません(統合テスト)が、それでも完全に細かいテストになるかもしれません:-)そして、技術的にはJUnitで実行することができます)ので、IMHOの違いは用語のみです。

最初からコードを書く場合は、個々のメソッドの単体テストを独立して作成することから始まります(依存関係を模倣します)。次に、次の段階では、あなたのクラスがうまく連携していることを確認してください。

しかし、レガシープロジェクト(すなわち、テストのない多くの継承されたコード)では、きめ細かい低レベルの単体テストから始めることはできないことがよくあります。その代わりに、より大きなコンポーネントの動作を明確化し、「ロック」する、より高レベルでより複雑なテストを書く方が効率的です。

残念ながら抜いて、この業界でのプロジェクトの大半は、私にとっては:-(遺産であるこのような場合には、アプローチの純度を超えるpragmatism勝利がダウンして手、:-)

+1

+1:レガシーコードに関するプラグマティズムのため。 –

+0

+1あなたはそれがどのように呼び出されているか気にする必要はありません。気になるものがエラーを起こしやすい場合は、それからベジェサスをテストしてください。 –

+0

私はしばしばCppUnitとJUnitを使ってクラスのアセンブリをテストします。これはユニットテストではなくpedantically *統合テスト*です。実際、これを避けることは決してできません。いくつの "低レベルのクラス"が実際にSTLクラスか 'java.lang'クラスを使用しているかを考慮してください。 – Raedwald

2

これは単体テストではなく、統合テストのように思えます。

関連するメソッドをユニットテストする場合は、依存関係をモックする必要があります(擬似請求書を使用して既知のデータを返す)。次に、ユニットテストを別々に書いて、請求書クラスが確実に機能するようにすることができます。

+0

IMHO、モックオブジェクトの使用は、多くの人が信じるほど必要ではありません。テストをボトムアップし、クラスのアセンブリをテストすることが妥当であることを受け入れると、オブジェクト/テストスパイをモックする必要が大幅に減ります。 – Raedwald

関連する問題