全栈程序猿的成长

【从零开始】springboot单元测试(贰)

2022-10-27  本文已影响0人  小尘哥

1、简单介绍

junit5大致分为三层,其整体架构如下(图片来自网络):

image.png

从上图可见,整个JUnit5可以划分成三层:顶层框架(Framework)、中间的引擎(Engine),底层的平台(Platform);

功能如下;

Platform:位于架构的最底层,是JVM上执行单元测试的基础平台,还对接了各种IDE(例如IDEA、eclipse),并且还与引擎层对接,定义了引擎层对接的API;

Jupiter:位于引擎层,支持5版本的编程模型、扩展模型;

Vintage:位于引擎层,用于执行低版本的测试用例;

对比junit4

对比junit4,升级改造了不少东西,从架构,到包、类等,看下官方,比如@Before和@After不再支持,使用@BeforeEach和@AfterEach进行替代,其他的都类似。


image.png

而junit4常用的@RunWith,在junit5中由@ExtendWith替代,并且是在有个性化扩展需要的时候再添加就可以,一般只需要加一个@SpringBootTest就可以哈皮的开启单元测试了。

2、数据回滚

经常会遇到有人问,单元测试时候保存/修改怎么测?这样不是就把数据库的数据改掉了吗?今天我们就来说一个简单的处理,使用注解: @Transactional。对,没看错,就是你在save()方法上加的那个事务注解,junit会将整个事务回滚,示例如下:

     @DisplayName("保存学生信息")
     @Test
     @Transactional
     void save(){
         Student student = studentService.getByCardNum(RandomUtil.randomInt());
         boolean r = studentService.save(student);
         Assertions.assertTrue(r);
     }

注意看下日志,执行最后会有“Rolled back·······”


image.png

最后看下数据库,依然只有原来测试的一条数据,回滚成功。


image.png

2、 断言Assertions的使用

Assertions是junit5新增的断言,区别于junit4的Asserts,先来总体看下内置方法:

[图片上传失败...(image-862083-1666869116904)]

尝试一下常用的几个assertTrue、assertNotNull、assertEquals、assertArrayEquals,示例代码:

 @DisplayName("断言测试")
 @SpringBootTest
 public class AssertionsTest {
 
     private static int a , b;
     private static Integer[] c, d;
 
 
     @BeforeAll
     static void before(){
         a = 1;
         b = 1;
         c = new Integer[]{1, 2, 3};
         d = new Integer[]{1, 4, 3};
     }
 
     @Test
     void assertionsDemo(){
 
         boolean result = a == b;
         Assertions.assertTrue(result);
         Assertions.assertNotNull(result,"result must be not null");
         Assertions.assertEquals(a,b);//这里可用在某些持久层框架添加、修改、删除时返回值为int类型的数据处理条数时
         Assertions.assertArrayEquals(c,d,"期望值是:{1,2,3}");
     }
 }
上一篇下一篇

猜你喜欢

热点阅读