springBoot整合 mockmvc
一、简介
https://blog.csdn.net/wltsysterm/article/details/79578850
为何使用MockMvc?
对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,
所以为了可以对Controller进行测试,我们引入了MockMVC。 MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,
而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
MockMvcBuilder是用来构造MockMvc的构造器,其主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分别对应两种测试方式,
即独立安装和集成Web环境测试(此种方式并不会集成真正的web环境,而是通过相应的Mock API进行模拟测试,无须启动服务器)。对于我们来说直接使用静态工厂MockMvcBuilders创建即可。
二、springBoot整合 mockmvc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
import javax.naming.InvalidNameException; import org.junit.Assert; import org.junit.Test; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("包名") public class ApplicationTest{ public static void main(String[] args) throws Exception { SpringApplication.run(ApplicationTest.class,args); } }
//SpringBoot1.4版本之前用的是SpringJUnit4ClassRunner.class @RunWith(SpringRunner.class) //SpringBoot1.4版本之前用的是@SpringApplicationConfiguration(classes = Application.class) @SpringBootTest(classes = {ApplicationTest.class},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT ) @AutoConfigureMockMvc public class xxxControllerTest { @Autowired XXXController xxxController; @Autowired protected MockMvc mockMvc; 如果测试的数据不确定,要保证可以准确测试逻辑并且多次运行,所有每次测得时候在数据库手动插数据,但是依旧不能把测试数据保存在数据库 用普通的JDBC是不行的,@Transactional这个注解有时是会失效的,自己理解应该是Spring声明式事物管理的范围内对数据库操作都是可以进行rollback的。 @Autowired public DataSource dataSource; @Test @Transactional @Rollback(value = true) public void testXXX() throws Exception{ JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("insert into XXXX");
...//构造需要的参数
MvcResult mrcresult = mockMvc.perform( MockMvcRequestBuilders.post("/XXX")//测试的API .contentType(MediaType.APPLICATION_JSON_UTF8) .content(JsonToObjectUtil.objToJson(xxx))//需要的参数 ) .andExpect(MockMvcResultMatchers.status().isOk()) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.jsonPath("responseCode").value("000")) .andReturn(); } }

浙公网安备 33010602011771号