2011-12-23 9 views
1

EJB 3.1のユニットテストでコンテナサービスを嘲笑することの利点は何ですか?ユニットテストEJB 3.1 - なぜモックコンテナサービス

私はそれについて考えるとき、私が得る可能性の答えがされている、

  1. それはテストのパフォーマンスが向上します。
  2. 他のAPIとのやりとりが多いため、ユニットテストのルールを遵守していません。 (これに関する意見を記入してください)その他にも

は、あなたは他の利点があると思いますか?

永続性、トランザクション管理(Bitronixの使用など)、メッセージング(Apache ActiveMQやメモリ内JNDIの使用など)など、コンテナが提供するサービスのいくつかをテストすることができます。自分のJVMのコンテナから外します。それでも、それは統合テストであり、単体テストはそうしてはならないという議論があります。

私によれば、あなたがテストで良い性能を発揮することができれば、単体テストのためにこれらのサードパーティの実装を使用するのは良いことです。なぜならあなたはモックであまりにも多くの時間を費やす必要がなく、エラー。開発者が嘲笑をよく理解していないと、彼はすべてを嘲笑したり、言い換えれば、テストを「緑色」に変えてしまいます。これは正しいですか? (これについてあなたの意見を述べてください)

結局のところ、単体テストの固体定義は決してありません:-)。それは著者に依存します。 「ユニット」はテスト可能な最小単位として定義され、「コンテキストによっては、個々のサブプログラムや緊密に関連するユニットで構成された大きなコンポーネント」と定義するものもあります。

ありがとうございました。

答えて

3

コンテナサービスを使用するコードをお持ちの場合は、そのサービスを模擬するか、実際の実装を使用する必要があります。あなたはどちらかをしなければならない:なしサービスの実装の、あなたのコードは実行されないので、テストすることはできません。

コンテナサービスの直接の依存関係を取り除くためにコードをリファクタリングすることもできます。これにより、これらのサービスをモックする必要もなくなります。しかしいつもではない。

コンテナサービスをモックすると、実際の実装を使用するよりも分離が得られます。また、コードの実行をより詳細に制御し、洞察を得ることができます。しかし、それはまた、より多くのコードを書くことと、バグを導入するリスク(モックのバグ、アプリケーションコードのバグに直接変換することができます)を伴います。

モックが間違いなく意味をなさない場合があります。たとえば、コードがUserTransactionで正しい呼び出しを行っていることを確認するテストを作成する場合は、実際のトランザクションモニタをインストルメントしようとするよりも、モックで行うほうがはるかに簡単です。コードが特定のSQLExceptionを正しく処理しているかどうかを検査するテストを作成する場合は、モックなしではほとんど不可能です。

これらの場合を除いて、実際のサービスを使用してテストを書くことも、それらを嘲笑することも可能です。私が思っているように、オーソドックスな単位テストのアプローチは、それらを模倣するか、実際にはラップしてラッパーをモックすることです。

これが実際に必要なのか、それとも良い考えであるのかは、議論の余地が非常に高いです。

StackOverflowは主観的な質問や議論や議論のためのものではないので、私はこれについて私の意見を述べることを躊躇します。私があなたのものと思っているのと同じことを言えば、正統な「動きのあるものをすべて模倣する」アプローチは不要で有害であり、実際のコードのより大きな領域をカバーしながら、よりモックを減らしてテストを書く方がはるかに良いでしょう。結局のところ、実際のコードはユーザーに出荷する予定なので、テストしないでください。

+0

ごめんなさい。私の質問は私の心を反映しませんでした。私は今質問を編集しました。今すぐ確認していただけますか? – Bala

+0

もう少し書いた。しかし、私はあなたにほとんど同意します。私はあなたの思考に挑戦するためにプロモックから本当に答えが必要だと思います! –

+0

あなたの返事とあなたの意見をたくさんありがとう:-)私はまた、他の人からより多くの意見を得ることに満足しています。 – Bala

関連する問題