2011-12-06 9 views
0

私は、リクエストが整形式であることを確認するために、テストサーバーにコールアウトするコードを実行するユニットテストをいくつか行っています。ただし、これは、このテストサーバーが停止している場合、単体テスト、したがってビルドがブロックされる可能性があることを意味します。これは単体テストの実践には合致しませんが、思考実験として、これらのテストを削除したり、実際にサーバに呼び出さないように変更することはできません。サーバがダウンしている場合(つまり、ConnectExceptionで結果を接続しようとした場合)、他の例外が発生した場合は失敗します。テストするコードは、ConnecExceptionを直接スローしませんが、それを含むラッパー例外がスローされます。だから、最初は、それが各テストはこのように見てから行くことを意味します:Java単体テストで特定のネストされた例外を暗黙に無視する方法は、あまり冗長ではありませんか?

@Test 
public void testNumberOne() { 
    // body of test... 
} 

この目的のために:

@Test 
public void testNumberOne() { 
    try { 
     // body of test... 
    } catch (ThirdPartyWrapperException e) { 
     if (!(e.getRootCause() instanceof ConnectException) { 
      throw e; 
     } 
    } 
} 

私は、各ユニットテストにキャッチ/試みることをペーストすることを避けることができます任意の方法はありますか?

@Test 
public void testNumberOne() { 
    try { 
     // body of test... 
    } catch (ThirdPartyWrapperException e) { 
     handleException(e); 
    } 
} 

private void handleException(ThirdPartyWrapperException e) 
      throws ThirdPartyWrapperException { 
    if (!(e.getRootCause() instanceof ConnectException) { 
     throw e; 
    } 
} 

しかし、私は行うことができ、さらには何があります:

私はALA、私はそれの少なくとも一部をリファクタリングすることができます知っていますか?

答えて

2

必要なリソースが思考だ

@Test 
public void testNumberOne() { 
    if (!requiredServerAvailable()) return; 
+0

利用可能な場合、私は判断するために先頭に行を追加します。それはsetup()メソッドに移動して、各テストに入れなくても済むようになりました。 (このクラスのすべてのテストはサーバーを使用します) – mongiesama

+0

チェック自体はsetUp()に移動することができますが、テストの実行を妨げることはできませんが、依然として 'if(check)return;'が必要です。 –

+0

Oh、もちろん。 – mongiesama

関連する問題