【发布时间】:2020-07-03 10:25:38
【问题描述】:
我尝试在我的控制器中测试我的方法addPerson(),但是当我执行测试时,我的状态为 200,MockHttpServletResponse 中的主体为空。我想用MockMvcResultMatchers 中的jsonPath 测试body 响应,但是当body 为空时我不能这样做。
这是我的测试:
@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;
}
感谢您的帮助。
【问题讨论】:
-
当您使用 @MockBean 注释模拟 PersonService 时,您会导致服务不调用实际方法并返回一个空列表。此外,您的 add 方法不会像您预期的那样工作,因为它不会将列表保存回您的模型。
标签: java junit mocking mockito junit5