0

私はバリデーターのクラスを持っています。

@Component("beforeCreateLanguageDtoValidator")
public class LanguageDtoValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return LanguageDto.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        //some logic validator
    }
}

そして、このバリデータを使用するサービス層のメソッド。

public boolean isValid(LanguageDto dto) {
        DataBinder dataBinder = new DataBinder(dto);
        dataBinder.addValidators(languageDtoValidator);
        dataBinder.validate(dto);
        if (dataBinder.getBindingResult().hasErrors()) {
            String errorsMessage = dataBinder.getBindingResult().getAllErrors().stream().
                    map(e -> messageSource.getMessage(e, Locale.getDefault()))
                    .collect(Collectors.joining("\n"));
            throw new LanguageNameNotValidException(errorsMessage);
        }
        return true;
    }

そして、この方法をどのようにテストしたかわかりません。2 つのテストを作成しましたが、どちらも機能しません。

@Test
void shouldGetTrueWhenDtoIsValid() {
    //when
    doNothing().when(dataBinder).addValidators(languageDtoValidator);
    doNothing().when(dataBinder).validate(dto);
    when(dataBinder.getBindingResult().hasErrors()).thenReturn(false);

boolean result = languageService.isValid(dto);

//than
assertThat(result).isEqualTo(true);
verify(dataBinder, times(1)).getBindingResult().hasErrors();
verify(dataBinder, times(1)).addValidators(languageDtoValidator);
verify(dataBinder, times(1)).validate(dto);

}

@Test
void shouldGetThrowExceptionWhenDtoIsNotValid() {
    //when
    doNothing().when(dataBinder).addValidators(languageDtoValidator);
    doNothing().when(dataBinder).validate(dto);
    when(dataBinder.getBindingResult().hasErrors()).thenReturn(true);

//than
verify(dataBinder, times(1)).getBindingResult().hasErrors();
verify(dataBinder, times(1)).addValidators(languageDtoValidator);
verify(dataBinder, times(1)).validate(dto);

assertThatThrownBy(() -> languageService.isValid(dto))
        .isInstanceOf(LanguageNameNotValidException.class);

}

ここでNPEをキャッチしている間:

`when(dataBinder.getBindingResult().hasErrors()).thenReturn(false);

at com.springCrudV2.demo.service.LanguageServiceTest.shouldGetThrowExceptionWhenDtoIsNotValid`

この問題を解決するためのアドバイスをいただけますか?

4

0 に答える 0