2016-06-29 2 views
0

내 프로젝트에서 스프링 어썰트를 사용하고 일부 상황에서 예외가 발생했는지 확인하기 위해 이들을 사용하려고합니다 (예 : 다른 어설 션). 다음 코드를예외가 발생하면 메시지를 지정할 가능성이있는 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"); 
    } 
    ... 

그러나 쓰기 : 정규식이 잘못된 경우 내가 (마다 다른가) 하나의 정규 표현식이 유효 사용자, 뭔가 그런를 표시하는 경우에 메시지를 지정하려면

//throws PatternSyntaxException in case if pattern is invalid 

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

모든 문자열에 대한 시도/잡기는 매우 편리하지 않다, 그것은 우와. 그런 일에 위의 코드를 대체하는 멋진 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"); 

나는 봄 같은 어설를 찾았다 그것을 찾을 수 없습니다. 아마도 다른 도서관에 그런 것이 있을까요?

감사합니다,

안드레이 단순히 유형의 유틸리티 메소드를 재사용하지 왜

+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에 모습을 가질 수 있습니다.

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

Javaslang의 시도는 매우 유사하다 : 다음 초기화 및 주요 실행 단계

에 해당 키클롭스의 시도의 예입니다 -

사이클롭스는 'withCatch'단계 특정 중에 예외를 캡처 시도 스칼라는 작곡 도중 어떤 단계에서 던져지는 모든 예외를 포착합니다. 당신이 당신의 패턴이나 단위 테스트에 대한 유효성을 검사하는 주장을 사용할

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")), 
    )); 
관련 문제