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

共 2592字,需浏览 6分钟

 ·

2023-06-15 20:39





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}");


}


}






浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报