Assert.isTrue()方法用于断言条件是否为真,如果条件不满足(即为false),则会抛出IllegalArgumentException,并附带预设的错误信息。在示例中,当1.23不小于2.23时,方法抛出了异常,显示1.23小于2.23。此方法常用于单元测试中确保代码行为符合预期。
Assert.isTrue(express,message) 是指测试指定的条件是否为True,如果为True,则测试通过,如果表达式express为false,则才输出信息。
示例代码如下:
public class AssertDemo {
public static void main(String[] args) {
Double num = new Double(1.23);
Assert.isTrue(num.compareTo(new Double(2.23)) == 1, "1.23小于2.23");
}
}
运行结果如下:
Exception in thread "main" java.lang.IllegalArgumentException: 1.23小于2.23
at org.springframework.util.Assert.isTrue(Assert.java:116)
at org.sang.test.AssertDemo.main(AssertDemo.java:15)
我们查看下Assert.isTrue()源码:
public static void isTrue(boolean expression, String message) {
if (!expression) {
throw new IllegalArgumentException(message);
}
}
发现,当expression为true时则通过,不发生异常,当expression为false时,则会抛出异常。
一、org.springframework.util.Assert断言工具类
1 对象和类型断言
notNull(Object object, String message)
:入参一定不是 null;isNull(Object object, String message)
:入参一定是 null;isInstanceOf(Class type, Object obj, String message)
:检查对象必须为另一个特定类型的实例
public void сhangeEngine(Engine engine) {
Assert.isInstanceOf(ToyotaEngine.class, engine);
// ToyotaEngine 是类 Engine的子类,可以通过
}
isAssignable(Class superType, Class subType, String message)
:subType 必须可以按类型匹配于 superType
2 文本断言
通常用来检查字符串参数。
- hasLength(String text, String message):当 text 为 null 或长度为 0 时抛出异常,空格算长度为1;
- hasText(String text, String message):text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
两者都区别:
hasLength(String text)文本为空格时不会抛出异常,但是hasText(String text)在空格的时候会抛出异常。
3 集合断言
- notEmpty(Collection collection, String message):当集合未包含元素时抛出异常。
二、同一异常捕获
因为Spring断言机制都会对未通过判断的地方抛出异常,所以,我们需要集中对这些异常进行捕获处理。采用AOP的方式,部分示例代码如下:
try {
...
} catch (IllegalArgumentException ill) {
logger.error(ill.getMessage());;
return null;
} catch (Throwable throwable) {
logger.error(throwable.getMessage());
return null;
}