2012-03-15 4 views
2

私は、いくつかのJavaサーブレットとのさまざまな相互作用を含むシーケンシャルプロセスをシミュレートする非常に長い統合テストを行っています。サーブレットの振る舞いは、要求に掲示されているパラメータの値に依存するので、すべての順列をテストして、自分のサーブレットが期待どおりに動作していることを確認したかったのです。長い多段階の統合テストをどのように分割できますか?

現在、私の統合テストと呼ばれる一つの長い機能である「testServletFunctionality()」とはこのようなものになる:

//Configure a mock request 
//Post request to servlet X 
//Check database for expected changes 
//Re-configure mock request 
//Re-post request to servlet X 
//Check database for expected changes 
//Re-configure mock request 
//Post request to servlet Y 
//Check database for expected changes 
... 

を、それぞれのconfigure /ポスト/チェックステップは、コードの約20行を持っているので、機能は非常に長いです。

このような長くて逐次的な反復統合テストを分割または整理する適切な方法は何ですか?

+0

これは無知の主張ですが、最初に各ステップをテストしましたか? –

+0

@ edmastermind29さて、私の単体テストは別々のクラスにあります。あなたは私の統合テストを単体テストするべきだと言っていますか? –

+0

@ジェフ私の経験では、統合テストは、A、B、C、Dがどのように状況下で反応するかを見ることです。この時点までに、A、B、C、Dの各ユニットを個別にテストしておく必要があります。あなたはユニットが部品の合計をテストしている場合、全体のテストを統合する時間。あなたの質問に答えるには、いいえ。 –

答えて

0

統合テスト(IT)の主な問題は、通常、セットアップが非常に高価であることです。テストは通常​​、お互いに依存するべきではなく、実行される順序ではなく、ITに対しては、テスト#1(ログイン)を実行しないとテスト#2は常に失敗します。

悲しい。

ソリューションは、製品コードのように、これらのテストを扱うことです:あなたは、あなたのテストでこれを行うことができますので、特定の操作を実行するヘルパーオブジェクトを構築し、いくつかの小さなものに長いメソッドを分割:

@Test 
public void someComplexText() throws Exception { 
    new LoginHelper().loginAsAdmin(); 
    .... 
} 

またはこれを移動コードを基本テストクラスに組み込みます:

@Test 
public void someComplexText() throws Exception { 
    loginHelper().loginAsAdmin(); 
    .... 
} 
関連する問題