【发布时间】:2022-12-22 22:41:39
【问题描述】:
我正在尝试从我的 CompanyController 测试一个以 Map 和 Id 作为参数的“补丁请求”。我希望得到一个 HTTP 状态 200,但我得到一个 HTTP 状态 400。 有人可以向我解释我做错了什么吗?谢谢你
CompanyController(部分代码省略):
@RestController
public class CompanyController {
@Autowired
private CompanyService companyService;
@PatchMapping("companies/{id}")
public ResponseEntity<CompanyDTO> patchUpdateCompany(@PathVariable Integer id,
@RequestBody Map<String, Object> updates) throws JsonMappingException {
Optional<CompanyDTO> optionalCompanyDTO = this.companyService.patchUpdateCompany(updates, id);
return ResponseEntity.ok(optionalCompanyDTO.get());
}
}
CompanyControllerTest(部分代码省略)
@WebMvcTest(CompanyController.class)
public class CompanyControllerTest {
@MockBean
private CompanyService companyService;
@Autowired
private MockMvc mockMvc;
private static List<CompanyDTO> companyDTOList;
@BeforeAll
public static void beforeAll(){
companyDTOList = new ArrayList<>();
CompanyDTO companyDTO1 = CompanyDTO.builder().id(1).name("xavi").build();
CompanyDTO companyDTO2 = CompanyDTO.builder().id(2).name("marteta").build();
companyDTOList.add(companyDTO1);
companyDTOList.add(companyDTO2);
}
@Test
void givenMapAndIdWhenPatchUpdateCompanyThenReturnHttpStatusOk() throws Exception {
Mockito.when(this.companyService.getCompanyById(1)).thenReturn(Optional.of(companyDTOList.get(0)));
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("name", "xavi2");
this.mockMvc.perform(patch("/companies/1")
.contentType(MediaType.APPLICATION_JSON)
.params(requestParams))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", Matchers.is("xavi2")));
}
}
【问题讨论】:
标签: java testing spring-boot-test mockmvc