spring Assert详解

一.什么是Assert

 Assert 翻译为中文为“断言”,使用过 JUnit 的读者都熟知这个概念,它断定某一个实际的运行值和预期想一样,否则就抛出异常。Spring 对方法入参的检测借用了这个概念,其提供的 Assert 类拥有众多按规则对方法入参进行断言的方法,可以满足大部分方法入参检测的要求。

每个Assert的方法可以与java assert表达式进行比较。java assert表达式在运行时如果条件校验失败,则抛出Error,有趣的是,这些断言可以被禁用。

Spring Assert的方法有一些特点: 
- 都是static方法 
- 抛出IllegalArgumentException 或 IllegalStateException异常 
- 第一个参数通常是需验证的对象或逻辑条件 
- 最后参数通常是异常消息,用于验证失败时显示 
- 消息可以作为String参数或Supplier 参数传输

尽管Spring Assert与其他框架的名称类似,如JUnit或其他框架,但其实没有任何共同之处。Spring Assert不是为了测试,而是为了调试。


二.详解

2.1逻辑断言

isTrue()

上面已经看到示例,其接受布尔条件,如果条件为假抛出IllegalArgumentException 异常。

state()

该方法与isTrue一样,但抛出IllegalStateException异常。

如名称所示,通常用在因对象的非法状态时,方法不能继续执行。假设骑车运行是不能加油,我们可以使用state方法断言:

2.2对象和类型断言

2.3文本断言

通常用来检查字符串参数

2.4Collection和map断言

2.5数组断言

 

 

 

Spring AssertSpring 框架提供的一个断言工具类,用于在程序运行中进行断言判断,如果断言条件不满足,则会抛出异常。但是 Spring Assert 只提供了一些基本的断言方法,如果我们需要进行更加个性化的断言判断,可以通过自定义异常来实现。 自定义异常可以继承自 Spring 的 AbstractThrowableAssert 类,并重写其 fail 方法。在自定义异常中,我们可以根据需求定义不同的异常类型,例如业务异常、参数异常等,并在 fail 方法中指定不同的异常信息。 下面以一个示例来说明如何使用和自定义 Spring Assert 异常: ```java public class CustomAssert extends AbstractThrowableAssert<CustomAssert, Object> { private CustomAssert(Object actual, Class<?> selfType) { super(actual, selfType); } public static CustomAssert assertThat(Object actual) { return new CustomAssert(actual, CustomAssert.class); } public CustomAssert isPositiveNumber() { isNotNull(); if (!(actual instanceof Number) || ((Number) actual).doubleValue() <= 0) { failWithMessage("Expected positive number, but found: %s", actual); } return this; } } ``` 在自定义的 CustomAssert 类中,我们通过继承 AbstractThrowableAssert 类,并实现自己的断言方法 isPositiveNumber。在该方法中,我们首先调用 isNotNull 方法来判断输入值是否为空,然后再进行我们的特定判断,如果判断不成立,就通过 failWithMessage 方法抛出异常。 通过自定义异常,我们可以根据业务需求实现更加具体化的断言功能,并在断言失败时提供更加详细的异常信息。在使用自定义断言时,只需要调用 assertThat 方法来创建 CustomAssert 对象,并链式调用不同的断言方法即可。 总的来说,Spring Assert 的自定义异常能够帮助我们实现更加灵活和个性化的断言判断,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值