Comment se moquer de propriétés d'objet constructeur à l'aide Mockito?

user3919727:

Je suis en train de se moquer d'un constructeur « EmailParams » dans ma classe de test. Mocking échoue depuis le constructeur EmailParams se moque comme nulle.

Ci-dessous ma méthode d'essai

@Test
   public void getContactEmailsByFilterSuccessTest() throws Exception {

    String contactId = "752";
    String emailAddress = "[email protected]";
    String emailType = "EW";

    MockHttpServletRequest request = new MockHttpServletRequest();
    when(helper.isNumeric(any(String.class))).thenReturn(true);

    List<ContactXref> sourcedContacts = getContactXrefs();
    when(contactXrefServiceMock.getContactsForId(contactId)).thenReturn(sourcedContacts);

    EmailParams emailParams = new EmailParams("[email protected]", "EW", sourcedContacts.get(0).getContact().getContactId().toString());

    List<Email> emailsList = getEmailsList();
    when(emailServiceMock.getEmailByFilter(emailParams)).thenReturn(emailsList);

    ResponseEntity<List<Email>> response = contactControllerMock.getContactEmailsByFilter(request, contactId, emailAddress, emailType);
    Assert.assertEquals("getContactEmailsByFilterSuccessTest: Expected response code to be 200", "200", 
  response.getStatusCode().toString());   
 }

Ceci est la méthode que je suis en train de se moquer. Test échoue lorsque son essayant de se moquer du constructeur

@GetMapping(value = "/{contactId}/" + UrlMapping.EMAILS, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Email>> getContactEmailsByFilter(HttpServletRequest request,
                                                            @PathVariable(name = RequestParams.CONTACTID) String contacId,
                                                            @RequestParam(required = false, name = RequestParams.EMAILADDRESS) String emailAddress,
                                                            @RequestParam(required = false, name = RequestParams.EMAILTYPE) String emailType)
                                                            throws Exception {


      ResponseEntity response = new ResponseEntity("Only numeric contactId is allowed", HttpStatus.BAD_REQUEST);

      List<Email> emailList;
      List<ContactXref> sourcedContacts;

      if (helper.isNumeric(contactId)) {

          sourcedContacts = contXrefService.getContactsForId(contactId);

          EmailParams params = new EmailParams(emailAddress, emailType, sourcedContacts.get(0).getContact().getContactId().toString());

          emailList = emailService.getEmailByFilter(params);
          if (emailList != null) {
               response = emailList.size() == 0 ? new ResponseEntity("No emails were found for the request", HttpStatus.NOT_FOUND) : new ResponseEntity(emailList, new HttpHeaders(), HttpStatus.OK);
           } else {
              response = new ResponseEntity("Encountered exception in retrieving emails", HttpStatus.INTERNAL_SERVER_ERROR);
          }
      }
       return response;
}

Voici ma classe qui a le constructeur.

public class EmailParams {

    String email;
    String emailType;
    String ptyId;

    public EmailParams() {
        super();
    }

    public EmailParams(String pEmail, String pEmailType, String pPtyId) {
        email = pEmail;
        emailType = pEmailType;
        ptyId = pPtyId;
    }
}

Comment se moquer correctement? Merci d'avance.

Dead Pool :

Si la equalsméthode n'est pas surchargée dans la EmailParamsclasse par défaut des Mockitoutilisations Object.equalspour comparer la EmailParamspassé à la getEmailByFilterméthode. Dans votre cas , les propriétés de l' objet ont les mêmes valeurs , mais ils sont encore différents objets. Donc , soit remplacer le equalsprocédé EmailParamsou l' utilisationArgumentMatchers.argThat

 when(emailServiceMock.getEmailByFilter(ArgumentMatchers.argThat(p -> p.getPEmail().equals("[email protected]") && condition2 && condition3 )))
                  .thenReturn(emailsList);

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=363972&siteId=1
conseillé
Classement