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

小尘哥

共 2592字,需浏览 6分钟

 · 2023-06-15


1、简单介绍

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

7ee8707e69ab1d7a5a09bd17b2e405db.webp

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

功能如下;

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

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

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

对比junit4

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

575a84f12595ad95131b7346635f997a.webp

而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·······”

e7934ceaa37ab23f76c4da336a7961ce.webp

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

acdd634a05f4baef70a83f962112eb1a.webp

2、 断言Assertions的使用

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

3749340a684c2dc8260b617cfb24f00d.webp

尝试一下常用的几个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}"); } }


浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报