`
uule
  • 浏览: 6338464 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

spring中的Assert断言

阅读更多

Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。类似的,当我们在编写类的方法时,也常常需要对方法入参进行合法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null 或空白字符,否则根本无须进行后继的处理。这时方法的编写者通常会在方法体的最前面编写一段对入参进行检测的代码,如下所示:

if (name == null || name.equls("")) {
    throw new IllegalArgumentException("参数错误!");
}

 使用 Assert 断言类可以简化方法入参检测的代码,如 InputStream getData(String file) 在应用 Assert 断言类后,其代码可以简化为以下的形式:

Assert.hasText((name, "参数错误!");

 

类似以上检测方法入参的代码是非常常见,但是在每个方法中都使用手工编写检测逻辑的方式并不是一个好主意。阅读 Spring 源码,您会发现 Spring 采用一个 org.springframework.util.Assert 通用类完成这一任务。

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

断言方法 说明
1. notNull(Object object) 
当 object 为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
2. isTrue(boolean expression) / isTrue(boolean expression, String message) 
当 expression 不为 true 抛出异常;

3. notEmpty(Collection collection) / notEmpty(Collection collection, String message) 
当集合未包含元素时抛出异常。
notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;

4. hasLength(String text) / hasLength(String text, String message)  当 text 为 null 或长度为 0 时抛出异常;

5. hasText(String text) / hasText(String text, String message)  text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;

6. isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message)  如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
7. isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message)  subType 必须可以按类型匹配于 superType,否则将抛出异常;

分享到:
评论

相关推荐

    业务异常提示处理 springboot+Assert(自定义断言)

    本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的业务逻辑,并通过自定义断言提升代码的可读性和可维护性。下面我们将详细探讨这些知识点。 1. **Spring...

    TestNG-Spring-Example

    7. **异常处理和断言**:TestNG提供了丰富的断言库,如`Assert.assertEquals()`、`Assert.assertTrue()`等,用于验证测试结果是否符合预期。同时,它还支持异常测试,可以捕获和检查预期抛出的异常。 8. **数据驱动...

    mybatis+spring+springtest

    【标题】"mybatis+spring+springtest" 涉及到的是在Java开发中集成MyBatis、Spring以及Spring Test框架的知识点。这个标题暗示了我们正在讨论如何在项目中整合这三个强大的工具来实现数据访问层(DAO)的自动化测试...

    spring-test

    4. `@Test`:标记测试方法,配合Assert库进行断言判断,验证代码的正确性。 5. `Mockito` 和 `@MockBean`:Spring Test集成了Mockito框架,允许我们创建mock对象,模拟依赖关系,隔离被测试对象。 三、Spring MVC...

    spring4+JUnit简单测试

    在这个例子中,`@Test`注解标识了一个测试方法,`assertEquals`用于断言预期结果与实际结果是否相符。 Spring4与JUnit的结合使得我们可以创建集成测试,验证整个Spring应用的组件之间是如何协作的。通过`@Autowired...

    Spring框架测试.zip

    Spring框架是Java应用程序开发中的一个核心工具,它提供了一个全面的编程和配置模型,促进了松散耦合、可测试和模块化的应用设计。在本压缩包"Spring框架测试.zip"中,包含的是用于进行Spring框架单元测试的重要组件...

    Spring Boot中的单元测试.docx

    ### Spring Boot中的单元测试 #### 一、引言 单元测试是软件开发过程中不可或缺的一部分,它有助于确保代码的正确性和可维护性。Spring Boot作为一款流行的微服务开发框架,不仅简化了开发流程,还提供了丰富的...

    Spring整合Redis

    本文将深入探讨如何在Spring项目中整合Redis,以及在测试过程中如何使用JUnit进行单元测试。 1. **Spring Data Redis** Spring Data Redis是Spring Framework的一个模块,它提供了对Redis数据库的抽象层,使得...

    Spring Boot 单元测试和集成测试实现详解

    在 Spring Boot 中,我们可以使用 @Test 注解来标记测试方法,然后使用 JUnit 的断言方法来验证测试结果。例如: ``` import org.junit.Test; import static org.hamcrest.CoreMatchers.equalTo; import static org....

    spring3学习笔记(2)-集成ibatis3进行单元测试

    4. 断言(Assertion):使用JUnit提供的assert方法,如assertEquals,assertNull等,来检查测试的结果是否符合预期。 5. 数据库初始化:在测试前,可能需要对数据库进行预设数据,以满足特定测试场景。可以使用诸如...

    spring boot内置工具类

    在Spring Boot中,`Assert`工具类提供了一系列静态方法,如`notNull()`、`isNull()`、`isTrue()`等,用于进行数据合法性检查,确保程序运行时不会出现意外情况。例如,`notNull()`方法可以用来检查传入的对象是否为...

    Spring 框架中注入或替换方法实现

    在上面的单元测试中,我们首先获取 BookInterface Bean,然后断言 getAuthor() 方法返回的 Author Bean 的名称和哈希码是否正确。 Spring 框架中注入或替换方法实现可以使用 BeanFactoryAware 接口或 CGLib 库来...

    spring+redis

    - 验证结果:通过断言(Assert)检查返回结果是否符合预期,同时可以监控Redis的数据变化,确保缓存机制正确工作。 3. **不依赖Tomcat的运行**:这个项目表明,测试类可以直接通过Java的main方法执行,无需部署在...

    Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例

    `getBookByIdTest()` 方法包含了断言(`Assert.assertEquals()`),这是单元测试的核心部分,它比较预期结果与实际结果,如果两者相符,测试就通过。 `UserDaoTest` 类进一步展示了如何在涉及数据库操作的测试中...

    Junit测试时所需要使用到的jar包

    在JUnit测试中,Hamcrest的匹配器可以和JUnit的`Assert`类结合,编写出更加清晰和强大的断言语句。例如,`assertThat(object, is(expected))`可以用来验证对象是否等于预期值,而不仅仅是简单的`assertEquals()`。 ...

    SpringBoot 多模块 Serivce 层单元测试

    总结来说,Spring Boot多模块项目中Service层的单元测试是一个系统的过程,涉及到测试环境搭建、测试类编写、模拟对象的使用以及断言和覆盖率的检查。通过有效的单元测试,我们可以保证Service层的业务逻辑正确,...

    定时任务cron 解析为中文.docx

    6. `org.springframework.util.Assert`:Spring Framework提供的断言工具类。 `CronExpParserUtil`的核心方法是`translateToChinese`,它接受一个cron表达式字符串作为输入,并返回该表达式的中文解释。在方法中,...

Global site tag (gtag.js) - Google Analytics