0


【单元测试】Spring Boot 的测试库

Spring Boot 的测试库 

单元测试

unit test

)是为了检验程序的正确性。一个单元可能是单个 程序对象方法 等,它是应用程序的最小可测试部件。

单元测试的必要性如下:

  • 预防 Bug。
  • 快速定位 Bug。
  • 提高代码质量,减少耦合。
  • 减少调试时间。
  • 减少重构的风险。

Spring Boot 提供了

spring-boot-starter-test

启动器。通过它,能引入一些有用的测试库,如下所示。

  • Spring Test & Spring BootTest:Spring Boot 提供的应用程序功能集成化测试支持。
  • Junit:Java 应用程序单元测试标准类库。
  • AssertJ:轻量级的断言类库。
  • Hamcrest:对象匹配器类库。
  • Mockito:Java Mock 测试框架。
  • JsonPath:JSON 操作类库。
  • JSONassert:用于 JSON 的断言库。

1.了解回归测试框架 JUnit

JUnit 是对程序代码进行单元测试的 Java 框架。它用来编写自动化测试工具,降低测试的难度、减少烦琐性,并有效避免出现程序错误。

JUnit 测试是 白盒测试(因为知道测试如何完成功能和完成什么样的功能)。要使用 JUnit,则只需要继承 TestCase 类。

JUnit 提供以下注解。

  注解 

  解释 
**@BeforeClass**在所有测试单元前执行一次,一般用来初始化整体的代码。**@AfterClass**在所有测试单元后执行一次,一般用来销毁和释放资源。**@Before**在每个测试单元前执行,一般用来初始化方法。**@After**在每个测试单元后执行,一般用来回滚测试数据**@Test**编写测试用例。**@Test(timeout=1000)**对测试单元进行限时。这里的  
    
     
      
      
        1000 
       
      
     
       1000 
      
     
   1000 表示若超过  
    
     
      
      
        1 
       
      
        s 
       
      
     
       1s 
      
     
   1s 则超时测试失败。**@Test(expected=Exception.class)**指定测试单元期望得到的异常类。如果执行完成后没有抛出指定的异常,则测试失败。**@lgnore**执行测试时将忽略掉此方法。如果用于修饰类,则忽略整个类。**@RunWith**在 JUnit 中有很多 Runner,它们负责调用测试代码。每个 Runner 都有特殊功能,应根据需要选择不同的 Runner 来运行测试代码。

2.了解 assertThat

Unit 4.4 结合 Hamcrest 提供了一个新的断言语法

assertThat

。使用 assertThat 的一个断言语句结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想。

(1)assertThat 的基本语法

assertThat([value],[matcher statement])
  • value:要测试的变量值。
  • matcher statement:如果 value 值与 matcher statement 所表达的期望值相符,则测试成功,否则失败。简单地说,就是 “两个值进行比较”。

(2)一般匹配符

  • assertThat(testNumber,allOf( greaterThan(5),lessThan(8));allOf 表示,所有条件必须都成立,测试才能通过。
  • … …

(3)字符串相关匹配符

  • assertThat(testString,is("longzhiran"));is 表示,如果前面待测的 testString 等于后面给出的 String,则测试通过。
  • … …

(4)数值相关匹配符

  • assertThat(testDouble,closeTo(1.0,8.8));closeTo 表示,如果测试的浮点型数 testDouble 在 1.0 ~ 8.8 之间,则测试通过。
  • … …

(5)collection 相关匹配符

  • assertThat(mObject,hasEntry("key","value");:hasEntry 表示,如果测试的 Map 对象 mObect 含有一个键值为 key 对应元素值为 value 的 Entry 项,则测试通过。
  • … …

3.了解 Mockito

Mockito 是 GitHub 上使用最广泛的 Mocking 框架。它提供简洁的 API 用来测试。Mockito 简单易学、可读性强、验证语法简洁。
在这里插入图片描述
与 JUnit 结合使用,Mockito 框架可以创建和配置 Mock 对象。

4.了解 JSONPath

JSONPath 是 xPath 在 JSON 中的应用。它的数据结构通常不一定有根元素,它用一个抽象的名字

$

来表示 最外层对象,而且允许使用通配符

*

表示所有的子元素名和数组索引。

JSONPath 表达式可以使用

.

符号解析 JSON,如以下代码:

$.person.card[0].num

或使用

[]

符号,如以下代码:

$['person']['card'][0]['num']

5.测试的回滚

在单元测试中可能会产生垃圾数据,可以开启事务功能进行回滚。在方法或类头部添加注解 @Transactional 即可。用法见以下代码:

@RunWith(SpringRunner.class)@SpringBootTest@TransactionalpublicclassCardRepositoryTest{@AutowiredprivateCardRepository cardRepository;@TestpublicvoidtestRollBack(){//查询操作Card card =newCard();
        card.setNum(3);
        cardRepository.save(card);}}

上述代码在类上添加了注解 @Transactional,测试完成后就会回滚,不会产生垃圾数据。如果要关闭回滚,则只要加上注解

@Rollback(false)

即可。

🚀 如果使用的数据库是 MySQL,有时会发现加了注解 @Transactional 也不会回滚,多数情况下是因为默认引擎不是 InnoDB。


本文转载自: https://blog.csdn.net/be_racle/article/details/139709994
版权归原作者 G皮T 所有, 如有侵权,请联系我们删除。

“【单元测试】Spring Boot 的测试库”的评论:

还没有评论