Unit testing 单元测试-Spring启动应用程序
我看了这个链接: 我计划对我的Spring Boot控制器进行单元测试。我已经从下面的控制器粘贴了一个方法。当我使用上述链接中提到的方法时,我必须服务。验证帐户(请求)的呼叫是否不会发出?除了测试HTTP状态码外,我们是否只是测试控制器是否接受指定格式的请求并返回指定格式的响应Unit testing 单元测试-Spring启动应用程序,unit-testing,spring-boot,Unit Testing,Spring Boot,我看了这个链接: 我计划对我的Spring Boot控制器进行单元测试。我已经从下面的控制器粘贴了一个方法。当我使用上述链接中提到的方法时,我必须服务。验证帐户(请求)的呼叫是否不会发出?除了测试HTTP状态码外,我们是否只是测试控制器是否接受指定格式的请求并返回指定格式的响应 @RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE
@RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<VerifyAccountResponse> verifyAccount(@RequestBody VerifyAccountRequest request) {
VerifyAccountResponse response = service.verifyAccount(request);
return new ResponseEntity<VerifyAccountResponse>(response, HttpStatus.OK);
}
@RequestMapping(value=“verifyAccount”,method=RequestMethod.POST,products=MediaType.APPLICATION\u JSON\u value)
公共响应验证帐户(@RequestBody VerifyAccountRequest){
VerifyAccountResponse=service.verifyAccount(请求);
返回新的ResponseEntity(response,HttpStatus.OK);
}
您可以编写单元测试用例
使用
确保您配置了所有服务器配置,如端口/url
@Value("${local.server.port}")
private int port;
private String getBaseUrl() {
return "http://localhost:" + port + "/";
}
然后使用下面提到的代码
protected <T> ResponseEntity<T> getResponseEntity(final String
requestMappingUrl, final Class<T> serviceReturnTypeClass, final Map<String, ?>
parametersInOrderOfAppearance) {
// Make a rest template do do the service call
final TestRestTemplate restTemplate = new TestRestTemplate();
// Add correct headers, none for this example
final HttpEntity<String> requestEntity = new HttpEntity<String>(new
HttpHeaders());
// Do a call the the url
final ResponseEntity<T> entity = restTemplate.exchange(getBaseUrl() +
requestMappingUrl, HttpMethod.GET, requestEntity, serviceReturnTypeClass,
parametersInOrderOfAppearance);
// Return result
return entity;
}
@Test
public void getWelcomePage() {
Map<String, Object> urlVariables = new HashMap<String, Object>();
ResponseEntity<String> response = getResponseEntity("/index",
String.class,urlVariables);
assertTrue(response.getStatusCode().equals(HttpStatus.OK));
}
protectedresponseEntity getResponseEntity(最终字符串)
requestMappingUrl,最终类serviceReturnTypeClass,最终映射
参数INORDEROF(外观){
//制作一个rest模板来执行服务调用
最终TestRestTemplate restTemplate=新TestRestTemplate();
//添加正确的标题,本例中没有
最终HttpEntity requestEntity=新HttpEntity(新
HttpHeaders());
//对url进行调用
final ResponseEntity=restTemplate.exchange(getBaseUrl()+
requestMappingUrl、HttpMethod.GET、requestEntity、serviceReturnTypeClass、,
参数(外观);
//返回结果
返回实体;
}
@试验
公共无效getWelcomePage(){
Map urlVariables=新HashMap();
ResponseEntity response=getResponseEntity(“/index”,
类,URL变量);
assertTrue(response.getStatusCode().equals(HttpStatus.OK));
}
这取决于您是否模拟了服务对象。如果你没有嘲笑,它会呼叫服务。谢谢@conceptquest。MockMvc的目的是什么?如果我不使用mock对象,我的所有依赖项都会通过使用另一篇文章中的代码(接受的答案)来注入吗?也许这篇文章有助于回答你的“MockMvc的目的是什么”问题。
protected <T> ResponseEntity<T> getResponseEntity(final String
requestMappingUrl, final Class<T> serviceReturnTypeClass, final Map<String, ?>
parametersInOrderOfAppearance) {
// Make a rest template do do the service call
final TestRestTemplate restTemplate = new TestRestTemplate();
// Add correct headers, none for this example
final HttpEntity<String> requestEntity = new HttpEntity<String>(new
HttpHeaders());
// Do a call the the url
final ResponseEntity<T> entity = restTemplate.exchange(getBaseUrl() +
requestMappingUrl, HttpMethod.GET, requestEntity, serviceReturnTypeClass,
parametersInOrderOfAppearance);
// Return result
return entity;
}
@Test
public void getWelcomePage() {
Map<String, Object> urlVariables = new HashMap<String, Object>();
ResponseEntity<String> response = getResponseEntity("/index",
String.class,urlVariables);
assertTrue(response.getStatusCode().equals(HttpStatus.OK));
}