java .lang.AssertionError при выполнении модульного теста при использовании моей собственной модели в качестве параметра - PullRequest
0 голосов
/ 13 января 2020

Я получил AssertionError, когда выполняю модульный тест. response.getBody () имеет значение null.

Вот метод модульного теста;

public void when_CustomerNumNotNull_Expect_TspResult() {
   /*
     some code
   */

    TspResultDto tspResultDto = new TspResultDto();

    tspResultDto.setTspResult("blabla");

    Mockito.doReturn(tspResultDto).when(creditService)
        .getTspResult(tspInputDto);

    ResponseEntity<TspResponse> response = creditController
        .getTspResult(TspRequest);

    Assert.assertNotNull(response.getBody()); // error occured this line because body null.
    Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
    //Assert.assertEquals(true, response.getBody().isHrResult());
  }

    }

TspInputDto и TspRequest - это мой модельный класс. Но я не получаю сообщение об ошибке, когда запускаю его с одним параметром, как показано ниже, без необходимости в классе модели.

Mockito.doReturn(newCreditApplicationDto).when(creditService)
        .getNewCreditApplicationNo(customerNum);

    ResponseEntity<NewCreditApplicationResponse> response = creditController
        .getNewCreditApplicationNo(customerNum);

    Assert.assertNotNull(response.getBody());
    Assert.assertEquals(HttpStatus.OK, response.getStatusCode());

Вот контроллер;

public ResponseEntity<TspResponse> getTspResult(
      TspRequest tspRequest) {

    TspInputDto tspInputDto = creditDemandRestMapper
        .toTspInputDto(tspRequest);

    TspResultDto tspResultDto = creditService
        .getTspResult(tspInputDto);

    TspResponse tspResponse = creditDemandRestMapper
        .toTspResponse(tspResultDto);

    return new ResponseEntity<>(tspResponse, HttpStatus.OK);

  }

Вот сервис;

public TspResultDto getTspResult(
      TspInputDto tspInputDto) {

    TspResultDto tspResultDto = new TspResultDto();

    /*
       Some code here...
    */
    return tspResultDto;
  }

Где я не так делаю?

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Вы издевались над creditController? Если вы этого не сделаете, то это не даст вам ответ на ложный объект.

0 голосов
/ 13 января 2020

В этой строке:

Mockito.doReturn(tspResultDto).when(creditService)
        .getTspResult(tspInputDto);

вы устанавливаете макет так, чтобы он возвращал ваш tspResultDto объект, если аргумент equals() равен tspInputDto, то есть это должен быть равный объект (в терминах equals() сравнение). Возможно, в вашем TspInputDto классе не определен метод equals.

В любом случае, я бы предложил переписать эту строку кода, используя argThat matcher:

Mockito.doReturn(tspResultDto).when(creditService)
        .getTspResult(ArgumentMatchers.argThat(tspInputDto ->
            // condition for provided tspInputDto
        ));
...