2012-03-06 8 views
0

私は初めに単体テストに必要なJava Servletしか持っていませんでした。私は要求が正しく処理されるようにしたかったので、私はSpringのMockHttpServletRequestをjUnitテストで使用しました。非常に簡単な単体テスト。Java Spring/Hibernate/Mavenプロジェクトで複数ステップのプロセスをテストする適切な方法は何ですか?

ここで、テストを拡張したいと思います。一連のデータベーストランザクションと模擬HTTPサーブレットリクエストを使用して、一定期間にわたってシステムを使用しているユーザーをシミュレートします。

私はこのすべてを単一の単位テストに詰め込むことができますが、それは単体テストの精神に違反するので、正しいことのようには見えません。

このような特定の順序で一連のイベントをテストする適切な方法は何ですか?ここで

は、私がこれまで持っているもののストリップダウンバージョンです:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"testContext.xml"}) 
public class servletTest { 

//Injected request 
@Resource(name="mockTestServletRequest") 
MockHttpServletRequest request; 

@Test 
public void mockRequest() { 
    //perform a mock servlet request 
} 

は、だから私はちょうど上記と私はすでに1以下@Testと注釈を付け複数のメソッドを追加することで、イベントのタイムラインをシミュレートするのですか?これらの方法が記載された順序で実行されることを保証していますか?

+0

Adam Bienによる[Unit Testing for Java EE](http://www.oracle.com/technetwork/articles/java/unittesting-455385.html)をご存知ですか? – zellus

+0

@zellus私はその記事を読んだだけで、私の状況にはあまり応用できません。私は既に実用的なユニットテストを受けており、簡単な単体テストからもっと頑強なマルチステップテストまでテストを成長させたいと考えています。 –

答えて

3

これは統合テストになります。 spring's testing frameworkを見てください。これは、あなたがあなたの春の文脈を開始し、すべてが動いていることを意味します。インメモリ・データベースを使用することも、スタンドアロン・データベースを使用することもできます。

すべてが開始されたら、あなたのコントローラーのインスタンスを挿入して、要求をトリガーし、別のコントローラーのインスタンスをトリガーすることができます。デフォルトでは、各メソッドはトランザクション内にあり、メソッドが完了するとロールバックされるため、データベースを汚染する心配はありません。

+0

コードスニペットとその下に質問を追加しました。 テストで注釈を付けられた複数のメソッドは、有効な統合テストと見なされますか? –

+0

はい。同じクラス内で複数のテストを行うことができます – Bozho

0

テストメンタリティの観点から、私はあなたに同意します。実際の単体テストはまさにその通りでなければなりません。コード内の単一のタッチポイントをテストし、それを超えないものです。

Mavenを使用しているので、実際には素晴らしいオプションがあります。推奨here on codehausが有益かもしれません。 「統合ユニットテスト」をモジュール化することで、それを別の目標に割り当てることができ、よりインテリジェントで統合されたテストをそこに生かせるようになります。

次のように私が使用している別のオプションは、テストに注釈を入れている

@IfProfileValue(name="integration", value="true") 

あなたも自分の本当のユニットテストや統合テストを実行するかどうかに引数を設定することができます。

最後に、開発データベースを使用していて、これを継続したい場合、これは問題ありませんが、これが継続的なテストであり、ロールバックしていない場合は、Mockitoまたは別のモッキングフレームワークで十分です。それは本当にあなたのテストのコンテキストに依存します。

関連する問題