Spring Boot测试相关设置
2017-11-01 00:00
239 查看
进行测试中专用的配置
有时候在测试中,我们需要对某些接口进行专门的配置,可以通过下面的注解实现:@TestConfiguration
这个注解可以:
补充额外的Bean
覆盖已存在的Bean
注意@Configuration并不会覆盖已存在的Bean。如果同一个接口有两个不同的实现类,需要用@Qualifier指定实现类。而@TestConfiguration会直接覆盖实现类。
所以需要将这个注解标注的类放在
test文件夹下,和其他代码隔离开
@SpringBootTest
需要在测试类上加上这个注解,声明要使用的配置类,包括@SpringBootApplication标注的类和使用@TestConfiguration标注的类
例如:
/** * Created by pierre_cai on 2017/10/31. * 配置测试的专用类 */ @TestConfiguration public class TestConfigs { /** * 覆盖项目中原有的BaseReqService接口实现 * @return */ @Bean public BaseReqService baseReqService(){ return new BaseReqService() { @Override public TokenBearer getTokenBearer() { TokenBearer tokenBearer = new TokenBearer(); tokenBearer.setUserId(1); tokenBearer.setSectionId(1); tokenBearer.setCompanyId(1); return tokenBearer; } @Override public List<Role> getRoles() { List<Role> roles = new ArrayList<>(); roles.add(Role.ROLE_ADMIN); roles.add(Role.ROLE_USER); return roles; } @Override public Integer getCompanyId(BaseReq req) { return 1; } }; } }
使用RestTemplate对RestFul接口进行测试
类上主要使用的注解有:@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = WebPortalApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@Rollback
属性、方法上使用的注解:
@LocalServerPort
@Test
主要使用的类:
HttpHeader
HttpEntity
RestTemplate
/** * Created by pierre_cai on 2017/9/28. */ // 指定使用JUnit4测试 @RunWith(SpringJUnit4ClassRunner.class) // 指定使用的配置类,包括程序入口和test专用的配置类,并指定使用随机接口 @SpringBootTest(classes = {WebPortalApplication.class,TestConfig.class},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // 指定使用的配置文件为application-test.yaml @ActiveProfiles("test") // 说明方法测试中所有对数据库的操作都要回滚 @Rollback public class CompanyControllerTest { //使用随机接口,避免接口被占用导致测试无法进行 @LocalServerPort private int port; //用于快速获取REST请求返回的对象 @Autowired private TestRestTemplate restTemplate; @Test public void getCompanyList() throws Exception { QueryCompanyReq req = new QueryCompanyReq(); req.setCompanyName("公司名"); // 可以通过HttpHeaders类修改请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<String& 3ff8 gt; formEntity = new HttpEntity<>(JSON.toJSONString(req), headers); String forObject = this.restTemplate // 如果项目中使用Spring Security,可以让请求带上验证信息 // 如果没有则不需要 //.withBasicAuth("userName","password") // 发送post请求 .postForObject("http://localhost:" + port + "/api/company/getCompanyList",formEntity, String.class); System.out.println(forObject); } }
相关文章推荐
- springboot如何测试打包部署
- spring boot @ConditionalOnxxx相关注解
- SpringBoot入门系列:第七篇 Spring Boot的测试
- spring boot+ Intellj idea devtools 设置热部署
- eclipse下SpringBoot开发和测试
- SpringBoot定时任务的设置
- spring-boot整合redis作为缓存(1)——redis的设置
- SpringBoot中设置Hibernate format_sql
- 在 SpringBoot 中设置允许跨域请求
- Springboot 打包跳过测试
- Spring boot quartz的相关资源
- spring boot配置mybatis代码自动生成(mybatis通用mapper相关基础代码自动生成)
- 使用MockMvc编写spring boot的controller的测试用例
- Spring Boot Web API测试
- springboot项目中使用MockMvc 进行测试
- SpringBoot学习笔记(四) SpringBoot Web相关的自动配置
- SpringBoot---测试---JPA找不到相对应参数的findOne方法
- springboot设置默认容器为jetty
- Springboot 相关错误收集
- spring 或springboot对controller层方法进行测试