项目上有需求要用到单元测试,并且在未来可能会有代码测试覆盖率的指标,所以提前学习下。其实是只写了业务层的代码实现,可是没有接口,所以想到了通过单元测试来模拟接口调用哈哈
关键点
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
- 在测试类上加上注解
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
- 注入自己需要的bean
private NetworkProxy networkProxy;
@Autowired
public void setNetworkProxy(NetworkProxy networkProxy) {
this.networkProxy = networkProxy;
}
其实像正常的开发Service那样使用单元测试类就好了
结果
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class RestaurantServiceImplTest {
private NetworkProxy networkProxy;
@Autowired
public void setNetworkProxy(NetworkProxy networkProxy) {
this.networkProxy = networkProxy;
}
/**
* 获取accessToken
* @return
*/
public String getAccessToken() {
HttpHeaders requestHeader = new RequestHeaderUtils.RequestHeaderBuilder()
.setContentType(MediaType.APPLICATION_FORM_URLENCODED)
.build().getRequestHeader();
//body
MultiValueMap<String, String> requestTokenBody = new RequestBodyUtils.RequestBodyBuilder()
.setGrantType("xxx")
.setUsername("xxx")
.setPassword("xxx;")
.build().getRequestBody();
HttpEntity httpEntity = new HttpEntity(requestTokenBody,requestHeader);
RestaurantRespDTO<TokenRespDTO> result = networkProxy.request(NetworkProxy.Target.RESTAURANT_LOGIN,HttpMethod.POST,httpEntity,
new ParameterizedTypeReference<RestaurantRespDTO<TokenRespDTO>>(){}, new HashMap<>());
log.info("调用登录接口返回 全部消息: " + result);
log.info("调用登录接口返回 Code 码: " + result.getStatusCode());
if(result.isSuccess()){
return result.getData().getAccess_token();
}else{
//其他,获取token失败
log.error("获取token失败: " + result.getStatusMsg());
throw new BusinessException(Integer.parseInt(result.getStatusCode()),result.getStatusMsg());
}
}
@Test
public void getxxxIntroduction() {
}
}