我在项目中使用春季断言,并想使用它们(或其他某些断言)来检查是否在某些情况下抛出了异常,例如我有以下代码:
//throws PatternSyntaxException in case if pattern is invalid
Pattern.compile(freeUsersRegex);
Pattern.compile(deletedUsersRegex);
Pattern.compile(movedUsersReges);
...
我想指定一条消息,以便在Regex无效(每次不同)以向用户显示哪个正则表达式无效,类似的是:
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");
}
...
但是,为每个字符串编写尝试/捕获不是很方便,将上述代码替换为类似的代码很酷:
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");
我在春季寻找这样的断言,找不到它。也许其他库中有类似的东西?
谢谢,
Andrey
为什么不简单地重复使用类型的实用程序:
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)
);
}
}
您可以看一下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尝试非常相似,并将捕获在组成期间的任何阶段抛出的所有异常。
以下是Javaslang尝试的示例:
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")),
));