@sur-pavel

Как исправить ошибку в @SpringBootTest?

Spring Boot, h2.
Есть класс:
package ru.surpavel.bugtrackingsystem;

imports...

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { BugTrackingSystemSpringBootApplication.class, 
        ProjectRepository.class, UserRepository.class,
        TaskRepository.class, ProjectController.class })
@AutoConfigureMockMvc
public class ProjectRestControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ProjectRepository projectRepository;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private TaskRepository taskRepository;

    @Autowired
    private ProjectController projectController;
    
    @Test
    public void createProject() throws Exception {
        String title = "third";
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(new Project(title));
        mockMvc.perform(post("/projects").content(json).contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath(title).exists());
    }
}

с методом createProject, который выдает ошибку:
java.lang.AssertionError: No value at JSON path "third"
	at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:295)
	at org.springframework.test.util.JsonPathExpectationsHelper.assertExistsAndReturn(JsonPathExpectationsHelper.java:319)
	at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:183)
	at org.springframework.test.web.servlet.result.JsonPathResultMatchers.lambda$exists$3(JsonPathResultMatchers.java:123)
	at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:196)
	at ru.surpavel.bugtrackingsystem.ProjectRestControllerIntegrationTest.createProject(ProjectRestControllerIntegrationTest.java:86)
	...


log:
MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /projects
       Parameters = {}
          Headers = [Content-Type:"application/json;charset=UTF-8", Accept:"application/json", Content-Length:"22"]
             Body = {
  "title": "third"
}
    Session Attrs = {}

Handler:
             Type = ru.surpavel.bugtrackingsystem.controller.ProjectController
           Method = ru.surpavel.bugtrackingsystem.controller.ProjectController#createProject(Project)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json"]
     Content type = application/json
             Body = {"id":3,"title":null}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []


Обычный post-запрос к запущенному SpringBootApp проходит без проблем. Все данные сохраняются.
В RestContoller'e есть метод:
@PostMapping("/projects")
    public Project createProject(@Valid Project project) {
        return projectRepository.save(project);
    }
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ответы на вопрос 1
BorLaze
@BorLaze
Java developer
Потому что проверять надо не
.andExpect(MockMvcResultMatchers.jsonPath(title).exists());

а
.andExpect(MockMvcResultMatchers.jsonPath("title").exists());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы