![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第10章 Spring Boot单元测试_第1页](http://file4.renrendoc.com/view14/M02/09/2B/wKhkGWcvZ7SAGFTiAABl6s-iv5U659.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第10章 Spring Boot单元测试_第2页](http://file4.renrendoc.com/view14/M02/09/2B/wKhkGWcvZ7SAGFTiAABl6s-iv5U6592.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第10章 Spring Boot单元测试_第3页](http://file4.renrendoc.com/view14/M02/09/2B/wKhkGWcvZ7SAGFTiAABl6s-iv5U6593.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第10章 Spring Boot单元测试_第4页](http://file4.renrendoc.com/view14/M02/09/2B/wKhkGWcvZ7SAGFTiAABl6s-iv5U6594.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第10章 Spring Boot单元测试_第5页](http://file4.renrendoc.com/view14/M02/09/2B/wKhkGWcvZ7SAGFTiAABl6s-iv5U6595.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章SpringBoot单元测试学习目的与要求本章重点讲解SpringBoot单元测试的相关内容,包括Junit5的注解、断言以及单元测试用例。通过本章的学习,掌握Junit5的注解与断言机制的用法,掌握单元测试用例的编写。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.1Junit5简介JUnit是一个Java语言的单元测试框架,是由ErichGamma和KentBeck编写的一个回归测试框架(RegressionTestingFramework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。多数Java开发环境(如:Eclipse、IntelliJIDEA)都已经集成了JUnit作为单元测试工具。JUnit5是由JUnitPlatform、JUnitJupiter以及JUnitVintage三部分组成,Java
运行环境的最低版本是Java8。JUnitPlatform:是Junit提供的平台功能模块,通过JUnitPlatform,其他的测试引擎都可以接入Junit实现接口和执行。JUnitJUpiter:是Junit5的核心,是一个基于JUnitPlatform的引擎实现,JUnitJUpiter包含许多丰富的新特性来使得自动化测试更加方便和强大。JUnitVintage:是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在Junit5下正常运行。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解1.@Test@Test注解表示方法是单元测试方法(返回值都是void)。但是与JUnit4的@Test不同,它的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试。示例代码如下:@TestvoidtestSelectAllUser(){}2.@RepeatedTest@RepeatedTest注解表示单元测试方法可重复执行,示例代码如下:@Test@RepeatedTest(value=5)voidfirstTest(){//该测试方法重复执行5次。
System.out.println(55555);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解3.@DisplayName@DisplayName注解为单元测试方法设置展示名称(默认为方法名),示例代码如下:@Test@DisplayName("测试用户名查询方法")voidfindByUname(){}4.@BeforeEach@BeforeEach注解表示在每个单元测试方法之前执行,示例代码如下:@BeforeEachvoidsetUp(){}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解5.@AfterEach@AfterEach注解表示在每个单元测试方法之后执行,示例代码如下:@AfterEachvoidtearDown(){}6.@BeforeAll@BeforeAll注解表示在所有单元测试方法之前执行。被@BeforeAll注解的方法,必须为静态方法,该静态方法将在当前测试类的所有@Test方法前执行一次。示例代码如下:@BeforeAllstaticvoidsuperBefore(){System.out.println("最前面执行");}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.2Junit5注解7.@AfterAll@AfterAll注解表示在所有单元测试方法之后执行。被@AfterAll注解的方法,必须为静态方法,该静态方法将在当前测试类的所有@Test方法后执行一次。示例代码如下:@AfterAllstaticvoidsuperAfter(){System.out.println("最后面执行");}8.@Disabled@Disabled注解表示单元测试方法不执行,类似于JUnit4中的@Ignore。9.@Timeout@Timeout注解表示单元测试方法运行时,如果超过了指定时间将会返回错误。示例代码如下:@Test@Timeout(value=500,unit=TimeUnit.MILLISECONDS)voidtestTimeout()throwsInterruptedException{Thread.sleep(600);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言Junit5的断言方法都是org.junit.jupiter.api.Assertions的静态方法(返回值为void)。1.assertEquals和assertNotEqualsAssertions.assertEquals(Objectexpected,Objectactual,Stringmessage)方法第一个参数是期望值,第二个参数是待测试方法的实际返回值,第三个参数message是可选的,表示判断失败的提示信息。判断两者的值是否相等,换言之不判断类型是否相等。inta=1;longb=1L;
//虽然a和b类型不同,但依旧判断是成功的,当a与b不相等时,测试不通过。assertEquals(a,b,"a与b不相等");MyUserau=newMyUser();MyUserbu=newMyUser();//虽然au和bu是指向不同的对象,但它们值相同,依旧判断是成功的。assertEquals(au,bu,"au与bu的对象属性值不相等");bu.setUname("ch");assertEquals(au,bu,"au与bu的对象属性值不相等");《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言2.assertSame和assertNotSameassertSame与assertEquals的区别,assertSame不仅判断值是否相同,还判断类型是否相同。对于对象,判断两者的引用是否是同一个。inta=1;longb=1L;longc=1L;//b和c比较,判断成功,因为他们的类型也相同。assertSame(b,c,"测试失败");//a和b比较,判断失败,因为他们的类型不相同。assertSame(a,b,"测试失败");MyUserau=newMyUser();MyUserbu=newMyUser();MyUsercu=bu;//bu和cu比较,判断成功,因为他们的引用是同一个。assertSame(bu,cu,"测试失败");assertSame(au,bu,"测试失败");《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言3.assertNull和assertNotNullAssertions.assertNull(Objectactual)实际测试值是null,则单元测试成功。4.assertTrue和assertFalseAssertions.assertTrue(booleancondition)实际测试值是true,则单元测试成功。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言5.assertThrowsAssertions.assertThrows(Class<T>expectedType,Executableexecutable,Stringmessage)判断executable方法执行过程中是否抛出指定异常expectedType。如果没有抛出异常,或者抛出的异常类型不对,则单元测试失败。@TestvoidtestAssertThrows(){
assertThrows(ArithmeticException.class,()->errorMethod());}privatevoiderrorMethod(){inta[]={1,2,3,4,5};for(inti=0;i<=5;i++){System.out.println(a[i]);}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言6.assertDoesNotThrowassertDoesNotThrow(Executableexecutable)判断测试方法是否抛出异常,如果没有抛出任何异常,则单元测试成功。@TestvoidtestAssertDoesNotThrow(){assertDoesNotThrow(()->rightMethod());}privatevoidrightMethod(){inta=1/1;}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.1.3Junit5断言7.assertAllassertAll(Executable...executables)判断一组断言是否都成功,都成功,整个单元测试成功。@TestvoidtestAll(){
assertAll(()->assertEquals(1,1),()->assertNotEquals(1,2),()->assertNull(null));}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.1测试环境构建在SpringBootWeb应用中,已经集成了Junit5和JSON相关的JAR包,所以可以直接进行单元测试,下面构建一个SpringBootWeb应用。1.创建SpringBootWeb应用创建基于Lombok依赖的SpringBootWeb应用ch10。2.修改pom.xml文件在pom.xml文件中添加MySQL连接器与MyBatis-Plus依赖。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.设置Web应用ch10的上下文路径及数据源配置信息server.servlet.context-path=/ch10#数据库地址spring.datasource.url=jdbc:mysql://localhost:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8#数据库用户名spring.datasource.username=root#数据库密码spring.datasource.password=root#数据库驱动spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#设置包别名(在Mapper映射文件中直接使用实体类名)mybatis-plus.type-aliases-package=com.ch10.entity#在控制台输出SQL语句日志.ch10.mapper=debug#让控制器输出的JSON字符串格式更美观spring.jackson.serialization.indent-output=true《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.创建实体类创建名为com.ch10.entity的包,并在该包中创建MyUser实体类。该实体类与【例7-5】中的相同,不再赘述。5.创建数据访问接口创建名为com.ch10.mapper的包,并在该包中创建UserMapper接口。UserMapper接口通过继承BaseMapper<MyUser>接口,对实体类MyUser对应的数据表user进行CRUD操作。UserMapper接口的代码与【例7-5】中的相同,不再赘述。6.创建Service接口及实现类创建名为com.ch10.service的包,并在该包中创建UserService接口及实现类UserServiceImpl。UserService接口及实现类UserServiceImpl的代码与【例7-5】中的相同,不再赘述。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
7.创建控制器类MyUserController
@AutowiredprivateUserMapperuserMapper;@AutowiredprivateUserServiceuserService;@GetMapping("/selectAllUsers")publicList<MyUser>selectAllUsers(){returnuserMapper.selectList(null);}@PostMapping("/addAUser")publicMyUseraddAUser(MyUsermu){//实体类主键属性使用@TableId注解后,主键自动回填
intresult=userMapper.insert(mu);returnmu;}@PutMapping("/updateAUser")publicbooleanupdateAUser(MyUsermu){returnuserService.updateById(mu);
}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.在应用程序的主类中扫描Mapper接口@SpringBootApplication@MapperScan(basePackages={"com.ch10.mapper"})publicclassCh10Application{publicstaticvoidmain(String[]args){SpringApplication.run(Ch191Application.class,args);}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.2测试Mapper接口在IntelliJIDEA中,选中类或接口的名字,按下快捷键Ctrl+Shift+T创建测试类,此时生成的测试类在test文件夹里面,测试方法都是void方法。如图10.1所示的CreateTest窗口。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.2测试Mapper接口@SpringBootTest用于SpringBoot应用测试,它默认根据包名逐级往上找,一直找到SpringBoot主程序(包含@SpringBootApplication注解的类),并在单元测试时启动该主程序来创建Spring上下文环境。所以,需要在单元测试类上使用@SpringBootTest注解标注后,才能进行单元测试。在测试类UserMapperTest中,使用Junit5的注解与断言进行Mapper接口方法的测试。@AutowiredprivateUserMapperuserMapper;@TestvoidgetOne(){ MyUsermu=userMapper.selectById(1);
assertEquals(mu.getUid(),1,"a与b不相等");
}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.3测试Service层单元测试Service层与测试Mapper接口类似,需要特别考虑Service是否依赖其他还未开发完毕的Service(第三方接口)。如果依赖其他还未开发完毕的Service,我们需要使用Mockito(JavaMock测试框架,用于模拟任何Spring管理的Bean)来模拟未完成的Service。假设,应用ch10的UserServiceImpl类依赖一个还未开发完毕的第三方接口UsexService。接口UsexService中有一个获得用户性别的接口方法getUsex。publicinterfaceUsexService{StringgetUsex(intid);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
10.2.3测试Service层创建UserServiceImpl的测试类UserServiceImplTest,在UserServiceImplTest类中,使用Mockito.mock方法模拟第三方接口UsexService的对象,并进行测试。@SpringBootTestclassUserServiceImplTest{@AutowiredprivateUserServiceuserService;//模拟第三方接口UsexService对象privateUsexServiceusexService=Mockito.mock(UsexService.class);@TestvoidtestGetOne(){intuid=1;StringexpectedUsex="女";/*given是BDDMockito的一个静态方法,用来模拟一个Service方法调用返回,anyInt()表示可以传入任何参数,willReturn方法说明这个调用将返回女。*/
BDDMockito.given(usexService.getUsex(anyInt())).willReturn(expectedUsex);
assertEquals(expectedUsex,userService.getById(uid).getUsex(),"测试失败,与期望值不一致");}}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录10.1Junit510.2单元测试用例10.3使用Postman测试Controller层《SpringBoot从入门到实战(第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 7435:2024 EN Fasteners - Slotted set screws with dog point
- 【正版授权】 ISO 15784-2:2024 EN Intelligent transport systems - Data exchange involving roadside modules communication - Part 2: Centre to field device communications using Simple Netwo
- 2025年度二手房贷款买卖合同(智能家居升级版)
- 2025版医疗器械临床试验临床试验现场监查服务合同
- 2025年度密封胶产品环保认证与评价合同
- 2025年度环保设备研发与制造合同
- 2025高考作文预测:需求诚可贵创新价更高
- 制定市场推广计划的实施步骤
- 固定资产管理流程优化计划
- 如何制定有效的危机应对计划
- 2024年长沙卫生职业学院单招职业适应性测试题库及参考答案
- 【信息技术】信息技术及其应用教学课件 2023-2024学年人教-中图版(2019)高中信息技术必修二
- (正式版)JTT 1502-2024 直升机救生员搜救作业手势信号要求
- 《让学生创造着长大》读书心得
- 2024年社区工作者考试必背1000题题库附答案(满分必刷)
- 江苏省连云港市灌南华侨高级中学2024届高三第二次模拟考试数学试卷含解析
- 毕业旅游活动设计与实施方案
- 政企业务部门培训
- 2024年高考历史:全3册核心知识梳理和大事年表
- 非标设备方案
- 2024-2026招商信诺人寿中国健康指数白皮书
评论
0/150
提交评论