java - 如何在 Spring Boot 中为 RestTemplate 编写 JUnit 测试

标签 java junit spring-boot

我从未为 Spring Boot 应用程序编写过 JUnit 测试。我的服务 (localhost) 通过 RestTemplate 调用服务,该服务向我发送响应。有人可以给我一个关于我的类(class)结构的小例子吗?或者有人知道我的案例的良好文档吗?

UI Controller :

@RequestMapping("/my-service")
public interface MyUIController {

    @RequestMapping(method=RequestMethod.GET, value= "/user", produces="application/json")
    public List<User> getUser(HttpServletRequest request,  HttpServletResponse response);
}

休息 Controller :

@RestController
public class MyUIRestController implements MyUIController {

  @Autowired
  private MyUIService myUIService;

  public List<User> getUser(HttpServletRequest request,  HttpServletResponse response) {
        try {
          return myUIService.getUser(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

MyUIService:

@Service
public class MyUIService {
   public List<User> getUser(HttpServletRequest request, HttpServletResponse response) throws IOException {

        String url = this.webServiceProperties.webUserBaseURL+"searchUser";

        MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
        params.add("firstName", request.getParameter("firstName"));

        UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(url).queryParams(params).build().encode();

        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        ResponseEntity<List<User>> responseEntity = restTemplate.exchange(
                uriComponents.toUri(), 
                HttpMethod.GET, requestEntity, 
                new ParameterizedTypeReference<List<User>>() {});

        return responseEntity.getBody();

    }
}

我到底需要测试什么,服务还是RestController?如您所见,我正在调用另一项服务。我是否需要进行模拟,或者我可以直接从我现在正在调用的服务测试我的 Controller /服务吗?

提前致谢!

最佳答案

测试RestController是个好主意。 ,通过公开getUser()你的方法MyUIRestController作为端点。

您可以使用 Spring MVC 测试框架来测试您的 Controller 。简单的谷歌搜索“Spring Rest Controller test”将我重定向到以下链接:

https://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-rest-api/

http://blog.zenika.com/2013/01/15/spring-mvc-test-framework/

您还可以引用下面的 Spring 文档:

http://docs.spring.io/spring-security/site/docs/current/reference/html/test-mockmvc.html

关于java - 如何在 Spring Boot 中为 RestTemplate 编写 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38895901/

相关文章:

java - Spring Boot 项目 "org.springframework.beans.factory.BeanCreationException:Error creating bean with name ' entityManagerFactory'"错误

c# - 如何在 Android 上接收 RemObjects 事件?

java - 听Java中的类

Java Junit - 预期会抛出异常,但没有抛出任何异常

java - 如何覆盖 JUnit 测试套件的默认输出

java - Spring 启动 : Disable security for Spring Boot Unit Test

java - 从 grails 应用程序中的自定义 groovy 文件加载 spring bean

java - 为什么 log4j 在(多次)重复相同异常后禁用堆栈跟踪?

java - JUNIT runner 无法识别类名

node.js - 在 Angular 中执行 Http get 方法而不重试并等待服务器发送响应?