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组件进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter组件之-Test Fragment(测试片段)

spring-boot-starter-test

在Spring中整合JUnit单元测试

如何使用不同的jest.config.js进行单元和组件测试?

如何使用 Spring MVC Test 对多部分 POST 请求进行单元测试?

使用 Spring MVC Test 对多部分 POST 请求进行单元测试