2016-06-29 23 views
0

Ich benutze Spring Asserts in meinem Projekt und möchte sie (oder vielleicht andere Asserts) verwenden, um zu überprüfen, ob in einigen Situationen eine Ausnahme ausgelöst wird folgender Code:Assert.notThrown mit der Möglichkeit, eine Nachricht anzugeben, wenn eine Ausnahme ausgelöst wird

//throws PatternSyntaxException in case if pattern is invalid 

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

ich eine Nachricht für den Fall angeben möchte, wenn regex ungültig ist (jedes Mal anders) Benutzer zeigen, die ein regulärer Ausdruck ungültig ist, so etwas wie die:

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"); 
    } 
    ... 

Aber schreiben versuchen/fangen für jede Zeichenfolge ist nicht sehr bequem, es geht ULD kühl sein, den Code oben mit so etwas zu ersetzen:

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"); 

ich für solche Assert im Frühjahr sah und war nicht in der Lage, es zu finden. Vielleicht gibt es so etwas in anderen Bibliotheken?

Danke,

Andrey

+0

Sie Assertions verwenden, um Ihr Muster oder für ein Unit-Test zu validieren? –

+0

Nicht für Komponententest, um Muster zu validieren, bevor meine Serviceklasse startet und um anzuzeigen, dass das Muster ungültig ist –

Antwort

1

Warum nicht einfach ein Dienstprogramm Methode des Typs Wiederverwendung:

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

Danke für Ihre Antwort, das ist eine Möglichkeit sicher, aber ich möchte einige vorhandene Lösung wiederverwenden, da ich nicht nur PatternSyntaxException abfangen muss ein Dutzend –

+0

gibt es keine Magie die Ausnahmen müssen irgendwo gefangen und verwaltet werden –

+0

Ja, ich verstehe, aber es könnte sein, dass diese Funktionalität (wie Ihre, aber generische wie) über Reflexion irgendwo implementiert wird; Also, um das Fahrrad nicht neu zu erfinden, suche ich nach etwas, das bereits implementiert ist, da ich viele Situationen habe, wie im ersten Post im Code –

0

Sie einen Blick auf Javaslang haben und Cyclop, die beide Implementierungen versuchen.

Cyclops Versuchen Ausnahmen bei bestimmten ‚withCatch‘ Phasen erfasst nur - die Nach

auf die Initialisierung und Hauptausführungsphasen entsprechen ist ein Beispiel für Zyklop Versuchen:

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

Javaslang Versuchen sehr ähnlich ist Die Scala Try und wird alle Exceptions erfassen, die während der Kompositionsphase geworfen werden.

Es folgt ein Beispiel für Javaslang das Try:

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")), 
    ));