Модульный тест для многоэтапной загрузки файла методом Spring в контроллере Spring - PullRequest
0 голосов
/ 30 октября 2018

пожалуйста, найдите ниже мой класс контроллера и класс обслуживания

        @RequestMapping(value = "/offers/{jobTitle}/applications", method = RequestMethod.POST, consumes = {
            "multipart/form-data" })
    public ResponseEntity<Object> uploadMultipartFile(@RequestPart("file") MultipartFile file,
            @PathVariable String jobTitle, @RequestParam("applicationStatus") String applicationStatus,
            @RequestParam("name") String name, @RequestParam("emailId") String emailId) throws IOException {
        Application app = applicationService.createApplicationMultipartFile(file, jobTitle, applicationStatus, name,
                emailId);
        URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{jobTitle}")
                .buildAndExpand(app.getOffer().getJobTitle()).toUri();
        return ResponseEntity.created(location).body(app);
    }

И класс обслуживания

    @Override
public Application createApplicationMultipartFile(MultipartFile file, String jobTitle, String applicationStatus,
        String name, String emailId) throws IOException {
    if (!offerRepository.existsById(jobTitle)) {
        throw new ResourceNotFoundException("JobTitle " + jobTitle + " not found !!");
    }
    List<String> emailIds = new ArrayList<>();
    List<Application> appliedApplications = applicationRepository.findByOfferJobTitle(jobTitle);
    for (Application app : appliedApplications) {
        emailIds.add(app.getEmailId());
    }
    if (emailIds.contains(emailId)) {
        throw new ExistingResourceException("User " + emailId + " has already applied for the given Post !!");
    }
    Offer offer = offerRepository.findById(jobTitle).get();
    Application application = new Application();
    application.setApplicationStatus(ApplicationStatus.valueOf(applicationStatus));
    application.setResume(file.getBytes());
    application.setName(name);
    application.setEmailId(emailId);
    application.setOffer(offer);
    return applicationRepository.save(application);
}

Я хочу написать тестовый блок для контроллера. я использую testNg и mockito для этого. ниже мое понимание

public class ApplicationControllerTest {

private MockMvc mvc;
private JacksonTester<Application> jsonApplication;

@Mock
ApplicationService appService;

@InjectMocks
ApplicationController appController;

private Offer offer;
private Application app1;
List<Application> appList1;

@BeforeMethod
public void setup() {
    offer = new Offer("LSE", new Date(),1);
     MockitoAnnotations.initMocks(this);
      mvc = MockMvcBuilders.standaloneSetup(appController)
                .build();

      JacksonTester.initFields(this, new ObjectMapper());
}

    @Test
public void canCreateANewApplicationMultiPart() throws Exception {
    Mockito.when(appService.createApplicationMultipartFile(Mockito.any(MultipartFile.class), Mockito.eq("LSE"), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))).thenReturn(app1);
    MockHttpServletResponse response = mvc.perform(post("/offers/LSE/applications").contentType(MediaType.MULTIPART_FORM_DATA_VALUE)
            .content(jsonApplication.write(new Application("john","john123","res".getBytes(),offer,ApplicationStatus.APPLIED)).getJson())).andReturn().getResponse();
    assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
    assertThat(response.getContentAsString()).isEqualTo(new ObjectMapper().writeValueAsString(app1));
}

Полагаю, мой контроллер ожидает ввода в @requestParam, поэтому я получаю сообщение об ошибке. если возможно, укажите контрольные примеры для этого метода контроллера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...