2016-06-29 4 views
0

私は自分のプロジェクトでSpring Assertを使用していますが、いくつかの状況で例外がスローされたかどうかを確認するために次のコード:例外がスローされた場合にメッセージを指定する可能性のあるAssert.notThrown

try { 
     Pattern.compile(freeUsersRegex); 
    } catch (PatternSyntaxException e) { 
     throw new IllegalArgumentException("Specify valid regular expression for Free users group"); 
    } 

    try { 
     Pattern.compile(deletedUsersRegex); 
    } catch (PatternSyntaxException e) { 
     throw new IllegalArgumentException("Specify valid regular expression for Deleted users group"); 
    } 
    ... 

しかし執筆:正規表現が無効である場合、私は(毎回異なる)が1つの正規表現が無効であるユーザー、何かそのようなを表示する場合に、メッセージを指定したい

//throws PatternSyntaxException in case if pattern is invalid 

Pattern.compile(freeUsersRegex); 
Pattern.compile(deletedUsersRegex); 
Pattern.compile(movedUsersReges); 
... 

すべての文字列のtry/catchはあまり便利ではありません上記のコードを次のように置き換えてuldを冷やしてください:

Assert.isNotThrown(Pattern.compile(freeUsersRegex), PatternSyntaxException.class, "Specify valid regular expression for Free users group"); 

Assert.isNotThrown(Pattern.compile(deletedUsersRegex), PatternSyntaxException.class, "Specify valid regular expression for Deleted users group"); 

私はそのようなAssert in Springを探していましたが、それを見つけることができませんでした。おそらく他の図書館にもそういうものがありますか?

おかげで、

アンドレイ単にタイプのユーティリティメソッドを再利用しないのはなぜ

+0

Javaslangのトライの例を以下に示しますか? –

+0

ユニットテストではなく、サービスクラスが開始される前にパターンを検証し、そのパターンが無効であることを示すようにしてください –

答えて

1

public static Pattern createPattern(String regex, String type){ 
    try { 
     return Pattern.compile(regex); 
    } catch (PatternSyntaxException e) { 
     throw new IllegalArgumentException(
      String.format("Specify valid regular expression for %s", type) 
     ); 
    } 
} 
+0

答えがありがとうございますが、確かに可能ですが、PatternSyntaxExceptionだけでなく –

+0

魔法はありません例外はどこかで捕まえて管理しなければなりません –

+0

ええ、私は理解しますが、あなたのようなこの機能はリフレクションによってどこかで実装されているかもしれません。だから自転車を改革しないでください。私はすでに実装されているものを探しています。コードの最初の投稿のように多くの状況があります –

0

あなたがJavaslangとの両方の実装を試してみるCyclopに見ることができます。

サイクロプスは、特定の「withCatch」フェーズで例外を捕捉してみ - 後の初期化に対応し、メインの実行フェーズ

をシクロのトライの例である:

Try.withCatch(()-> Pattern.compile(freeUsersRegex)) 
    .onFail(PatternSyntaxException.class, 
       e -> throw new IllegalArgumentException("Specify valid regular expression for Free users group")); 

Javaslangトライは非常によく似ていますScalaは、作曲中のどの段階でもスローされたすべての例外を取り込みます。あなたのパターンやユニットテストのために検証するアサーションを使用したい

Try.of(()-> Pattern.compile(freeUsersRegex)) 
    .recover(e -> Match(e).of(
     Case(instanceOf(PatternSyntaxException.class), throw new IllegalArgumentException("Specify valid regular expression for Free users group")), 
    )); 
関連する問題