2012-02-26 17 views
1

m1()とm2()を呼び出すテンプレートメソッドtemplate()があるとします。私はm1とm2のテストをしています。今度はtemplate()のテストでmockingを使ってm1とm2が正しく呼び出されたかどうかをチェックしたり、そのAPIをテストしたり、その両方をテストする必要があります。;低レベルではありません

私はテンプレートのアルゴリズム(模擬を使用して)をチェックするテストが低レベルであり、ソースコードの各行に対してチェックを持つような感じです。

私は他の人がこれについて考えていることを聞きたいと思います。

答えて

0

私は、分離と統合の2種類のテストを実行するのが好きです。

私の分離テストには、他のクラスとのすべてのやりとりを模擬してユニットテストクラスが含まれています。 Powermockのような模擬フレームワークを使用して、すべてのオブジェクトのやりとりを模擬し、定義された(定義されていない)すべての相互作用が各テスト中に発生したことを検証できます。これらの分離テストは、チームが期待するコードカバレッジのメトリックを提供できる低レベルのテストです。 Hudsonのような継続的な統合ツールを使用して、アイソレーションユニットテストの実行およびメトリクスの収集を自動化することができます。

統合テストでは、複数のクラスを起動するフローが実行されます。私は、ハッピー・パス・シナリオといくつかのエラー・シナリオをテストする自動スイートを構築するのが好きです。しかし、私は、アプリケーション内のすべてのコード行に触れるスイートを構築して管理していません。コストとリスクに基づいた決定です。 fitnesseのようなツールを使用して統合テストを自動化できる場合は、統合環境テストを開発環境のスモークテストとして使用し、必要に応じて実行して、アプリと環境が問題なく稼働していることを確認することもできます。

これは非常に良い話題だと思います。私は、あなたのテストのアプローチを決定する際に考慮すべき多くの要素があるので、これについて一つの正解があるとは思わない。

+0

私たちがインタラクションをテストするとき(期待を確認するための模擬フレームワークを使用して)、私たちのテストが実装に縛られることはありませんか? APIレベル、つまりjavadocが約束しているものであれば、実装は自由に変更できます。パブリッシュ/サブスクライブシナリオの期待値を確認する価値はわかりますが、テンプレートメソッドについてはあまりよく分かりません。 – Susanta

関連する問題