MockHttpServletResponse body empty - PullRequest
       62

MockHttpServletResponse body empty

0 голосов
/ 23 марта 2020

Я пытаюсь проверить мой метод addPerson () в моем контроллере, но когда я выполняю тест, у меня есть статус 200 с пустым телом в MockHttpServletResponse. Я хотел бы проверить реакцию тела с помощью jsonPath из MockMvcResultMatchers, но я не могу сделать это, пока тело пустое.

вот мой тест

@WebMvcTest(PersonController.class)
@ExtendWith(SpringExtension.class)
public class PersonControllerTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    private Model model;

    @MockBean
    private PersonService service;


     @Test
     public void addPersonTest() throws Exception {

            this.mvc.perform(post("/person/add")
            .contentType(MediaType.APPLICATION_JSON).content("{\"firstName\": \"Test\",\"lastName\": \"\",\"address\": \"\",\"city\": \"\",\"zip\": \"\",\"phone\": \"\",\"email\": \"\"}"))
            .andDo(MockMvcResultHandlers.print())
                    .andExpect(status().isOk());
     }

вот мой контроллер с Метод addPerson ()

@RequestMapping("/person")
@RestController
public class PersonController {

    @Autowired
    Model model;

    private static final Logger logger = LogManager.getRootLogger();

    @Autowired
    private PersonService personService;

    @GetMapping("/")
    public List<Person> allPerson() {
        return personService.all();

    }

    @PostMapping("/add")
    public List<Person> addPerson(@RequestBody Person person) {
        List<Person> listPerson = this.personService.add(person);

        logger.info("Request = @RequestBody = {}", person);
        logger.info("Response {}", listPerson);
        return listPerson;
    }

и вот служба

@Service
public class PersonService {

    @Autowired
    private Model model;

    public PersonService(Model model2) {
         this.model = model2;
    }

    public List<Person> add(Person person) {
        List<Person> listPersons = model.getPersons();
        listPersons.add(person);
        return listPersons;

    }

спасибо за вашу помощь

1 Ответ

0 голосов
/ 23 марта 2020

Когда вы высмеиваете PersonService, вы должны указать его поведение, иначе оно всегда возвращает null. Для этого вы можете использовать when().thenReturn() от Mockito:

@WebMvcTest(PersonController.class)
@ExtendWith(SpringExtension.class)
public class PersonControllerTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    private Model model;

    @MockBean
    private PersonService service;


     @Test
     public void addPersonTest() throws Exception {

           List<Person> personList = Arrays.asList(new Person()); // create list here
           when(service.add(any(Person.class)).thenReturn(personList); // mock the behaviour of your PersonService bean

           this.mvc.perform(post("/person/add")
            .contentType(MediaType.APPLICATION_JSON).content("{\"firstName\": \"Test\",\"lastName\": \"\",\"address\": \"\",\"city\": \"\",\"zip\": \"\",\"phone\": \"\",\"email\": \"\"}"))
            .andDo(MockMvcResultHandlers.print())
                    .andExpect(status().isOk());
     }
}
...