【问题标题】:Testing Spring Rest Endpoints测试 Spring Rest 端点
【发布时间】:2020-03-14 22:44:58
【问题描述】:

当我尝试 findbyid 测试时,我试图在我的控制器上运行测试,但我不断收到 404,但我不确定为什么。

这是来自我的控制器的方法

 @CrossOrigin
@GetMapping(path="/movie/{id}")
public @ResponseBody Movies getMovie(@PathVariable Integer id){
    return moviesRepository.findById(id)
            .orElseThrow(() -> new ResponseStatusException(
            HttpStatus.NOT_FOUND, "Movie not found"
    ) );
}

这就是测试。

@Test
void getSingleMovie() throws Exception{
    Movies movies = new Movies(1, "Star Wars", "A New Hope");
    when(moviesController.getMovie(1)).thenReturn(movies);
    MvcResult mvcResult = mockMvc.perform(
            MockMvcRequestBuilders.get("/movies/1")
                    .accept(MediaType.APPLICATION_JSON)
    ).andReturn();
    Mockito.verify(moviesRepository).findAllById(Collections.singleton(1));

我的堆栈跟踪的输出包含以下内容...

    MockHttpServletResponse:
           Status = 404
    Error message = Movies not found
          Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
    java.lang.AssertionError: Response header 'Access-Control-Allow-Origin' expected:<*> but was:<null>
    Expected :*
    Actual   :null

【问题讨论】:

  • 控制器有请求映射吗?
  • 您的方法与/movie/{id} 映射,但在测试中您使用的是/movies/1(它有多余的字符s)。
  • 是的,尝试在/movie/1 上更改测试中的 URL。 IE。 MockMvcRequestBuilders.get("/movie/1").
  • /movies/1 url 错误,在/movie/1 上更改它。
  • 这是因为控制器调用了findById 方法,但在测试中您正在检查的是被称为findAllById 存储库方法。

标签: spring-boot mockito mockmvc


【解决方案1】:

你需要稍微改变一下你的测试方法 如下所示。需要修正一下

@Test
void getSingleMovie() throws Exception{
    Movies movies = new Movies(1, "Star Wars", "A New Hope");
    when(moviesRepository.findById(Mockito.eq(1))).thenReturn(Optional.of(movies));
    MvcResult mvcResult = mockMvc.perform(
            MockMvcRequestBuilders.get("/movie/1")
                    .accept(MediaType.APPLICATION_JSON)
    ).andReturn();
    Mockito.verify(moviesRepository).findById(Mockito.eq(1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 2020-12-03
    • 2018-11-19
    • 2017-08-05
    • 2022-10-02
    • 1970-01-01
    • 2019-04-23
    相关资源
    最近更新 更多