Не удалось вызвать метод контроллера с помощью MockMvc - PullRequest
0 голосов
/ 23 апреля 2020

Я не могу понять, как вызвать метод контроллера (API) в этом случае. Как отправить MultipartFile в качестве параметра запроса и как передать запрос HttpServletRequest, чтобы макет Mvc мог вызвать реальный метод для тестирования. </p> <pre><code>@RunWith(SpringRunner.class) public class PartnerSiteLoadControllerTest { private MockMvc mockMvc; @Mock private PartnerSiteUploadService partnerSiteUploadService; @InjectMocks private PartnerSiteLoadController partnerSiteLoadController; @Before public void setup() { this.mockMvc = MockMvcBuilders.standaloneSetup(partnerSiteLoadController) .setControllerAdvice(new PartnerExceptionHandlerMapper()).build(); } @Test public void uploadSitesInBulk()throws Exception { String userId = "userId"; HttpServletRequest request = mock(HttpServletRequest.class); UserPrincipal userPrincipal = new UserPrincipal(); userPrincipal.setId("id"); BulkUploadResponseDTO bulkUploadResponseDTO = new BulkUploadResponseDTO(); FileInputStream inputFile = new FileInputStream( "src/test/resources/PartnerSites_2019-09-04_v1.xlsx"); MockMultipartFile file = new MockMultipartFile("PartnerSites_2019-09-04_v1.xlsx", "PartnerSites_2019-09-04_v1.xlsx", "multipart/form-data", inputFile); when(file.getOriginalFilename()).thenReturn("PartnerSites_2019-09-04_v1.xlsx"); when(request.getAttribute("userPrincipal")).thenReturn(userPrincipal); when(partnerSiteUploadService.uploadSitesInBulk(userId,file)).thenReturn(bulkUploadResponseDTO); mockMvc.perform(MockMvcRequestBuilders.fileUpload("/v4/slm/partners/sites/import") .file(file).contentType(MediaType.MULTIPART_FORM_DATA).requestAttr("userPrincipal",userPrincipal)) .andExpect(status().isOk()); verify(partnerSiteUploadService,times(1)).uploadSitesInBulk(userId,file); verifyNoMoreInteractions(partnerSiteUploadService); }

} Метод класса контроллера

@RestController
@RequestMapping("/v4/slm/partners/sites/import")
@Api(value = "Site Bulk Upload Service")
@Slf4j
@Validated
public class PartnerSiteLoadController {

private PartnerSiteUploadService partnerSiteUploadService;

@Autowired
public PartnerSiteLoadController(PartnerSiteUploadService partnerSiteUploadService) {
    this.partnerSiteUploadService = partnerSiteUploadService;
}

@PostMapping(value = "", headers = ("content-type=multipart/*"))
@ApiOperation(value = "Import sites in bulk")
public ResponseEntity<BulkUploadResponseDTO> uploadSitesInBulk(@RequestParam("file") MultipartFile excelFile, HttpServletRequest request){

    UserPrincipal userPrincipal = (UserPrincipal) request.getAttribute("userPrincipal");
    String userId = userPrincipal.getId();

    log.info("Received excel file with name {}......",excelFile.getOriginalFilename());

    if(!excelFile.isEmpty()){
        return ResponseEntity.status(HttpStatus.CREATED).body(partnerSiteUploadService.uploadSitesInBulk(userId,excelFile));
    }
    else{
        throw new BadRequestException("Received empty excel file");
    }
}
</code>

}

при выполнении теста я получаю 400 код ошибки. макет mvc не вызывает исходный API.

...