spring test组件进行单元测试
Posted senleyumi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring test组件进行单元测试相关的知识,希望对你有一定的参考价值。
1、测试驱动开发(Test Driven Development,TDD),就是我们按照需求写一个自己预期结果的测试用例,这个测试用例刚开始可能是失败的测试,随着不断的编码和重构,最终让测试用例通过测试,这样才能保证软件的质量和可控性。
2、测试依赖,包存活在test周期,发布时不包含jar包 。
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-test</artifactId> 4 <scope>test</scope> 5 </dependency>
3、spring Test的主要注释:
(1)@RunWith(SpringRunner.class)使测试运行在spring环境中。
(2)@SpringBootTest代表一个springboot测试。
(3)@AutoConfigureMockMvc代表注入一个MockMvc实例,MockMvc模拟MVC对象。
(4)@WebAppConfiguration用来声明ApplicationContext将是一个WebApplicationContext。
(5)@Autowired向测试用例中注入实例。
(6)@Test是测试的方法。
(7)@Before在测试开始前进行的初始化工作。
(8)@After在测试方法之后执行的操作方法。
4、service层的测试:
(1)service层测试类上只需添加@RunWith(SpringRunner.class)和@SpringBootTest两个注解。
(2)使用@Autowired注解注入service对象,当service抛出java.lang.exception时,在测试方法后throws Exception即可。
(3)注意save方法的传参,比如方法传参是一个实体entity,可用set方法添加属性值,实现参数传递。若是若干个参数,直接给参数赋值传入方法中即可。包括id值在内一条记录的所有参数都要有值。
5、controller层的测试:
(1)controller层测试类上需添加@RunWith(SpringRunner.class)、@SpringBootTest、@AutoConfigureMockMvc和WebAppConfiguration四个注解。
(2)使用@Autowired注解注入controller对象,当controller抛出java.lang.exception时,在测试方法后throws Exception即可。
(3)首先执行命令MockMvcBuilders.standaloneSetup(qcQpbCinemaTicketController).build()指定测试的控制器。
(4)将需要测试的方法的权限注释掉,否则org.springframework.web.util.NestedServletException: Request processing failed请求失败。
(5)controller层测试类的url需要和方法url格式一致。比如,当你测试controller层的List方法,一般url写到控制器类映射加上方法映射就可以了,但是加了分页的限制条件后,url需要改为url?page=1&limit=1000&sidx=&order=。
(6)当需要启动项目获取某个值作为参数进行传递时,测试会报org.springframework.web.util.NestedServletException: Request processing failed.This is an invalid application configuration.因为测试方法获取不到该值,因此需要注释掉需要启动项目获取该值的命令,再进行测试就可以实现想要测试的效果了。
(7)当测试方法需要传参时,使用params传集合参数,但是键和值均为字符串类型,如果controller层的方法传实体类参数,就没影响。但是传不同类型的参数,需要将字符串类型转换为相应的参数类型。
(8)当id值自增时,不改变id值的情况下添加数据id值正常自增。若要改变id值在测试方法传id参数是行不通的,需要自己在serviceImpl中自定义一个id值,因此比较麻烦。
(9)controller层测试也有自己的局限性。如果controller层的方法需要传递实体类参数时,此时测试方法传集合参数,服务器会报400错误。解决方案是在service层进行测试即可。
以上是关于spring test组件进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用不同的jest.config.js进行单元和组件测试?