我在我的项目中使用Spring Asserts并希望使用它们(或者可能是其他一些Asserts)来检查在某些情况下是否抛出异常,例如我有以下代码:
//throws PatternSyntaxException in case if pattern is invalid
Pattern.compile(freeUsersRegex);
Pattern.compile(deletedUsersRegex);
Pattern.compile(movedUsersReges);
...
如果正则表达式无效(每次不同),我想指定一条消息,以向用户显示哪一个正则表达式无效,类似:
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");
}
...
但是为每个字符串编写try / catch都不是很方便,用上面的代码替换上面的代码会很酷:
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");
我在Spring中寻找过这样的Assert而无法找到它。也许在其他图书馆里有类似的东西?
谢谢,
安德烈
答案 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)
);
}
}
答案 1 :(得分:0)
您可以查看Javaslang和Cyclop,它们都有Try实现。
独眼巨人尝试仅在特定的'withCatch'阶段捕获异常 - 这对应于初始化和主要执行阶段
以下是Cyclop试用的一个例子:
Try.withCatch(()-> Pattern.compile(freeUsersRegex))
.onFail(PatternSyntaxException.class,
e -> throw new IllegalArgumentException("Specify valid regular expression for Free users group"));
Javaslang Try与Scala Try非常相似,它将捕获在合成过程中任何阶段抛出的所有异常。
以下是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")),
));