Модульный тест не удалось пройти из-за ошибки конструкции

#java #spring-boot #unit-testing #junit #java-8

Вопрос:

Я изо всех сил пытаюсь написать модульный тест, когда я тестирую свой блок кода, он говорит : ошибка конструктора

мой код ниже;

 @Component public class CodeConfigBuilder {   @Value("${promoConfig.prefix.length}")  private Integer prefixLength;    public void validateRequestAndSetDefaults(PromoRequest promoRequest) {   prefixAndPostFixControlAccordingToLength(promoRequest); }      private void prefixAndPostFixControlAccordingToLength(PromoRequest promoRequest) {    if (promoRequest.getPostfix() != null) {    int lengthControl = prefixLength   promoRequest.getPostfix().length();    if (lengthControl gt;= promoRequest.getLength()) {    throw new BadRequestException(Constant.ClientConstants.THE_SUM_OF_PREFIX_AND_POSTFIX_CAN_NOT_BE_GREATER_THAN_LENGHT);  }  }    }    public void validateRequestAndSetDefaults(PromoRequest promoRequest) {     prefixAndPostFixControlAccordingToLength(PromoRequest promoRequest)    }     my yml configuration below;    #========= Promo Config ========== #    promoConfig:  prefix:  length: 3  

мои услуги ниже;

 public void validateRequest(PromoRequest promoRequest) {    codeConfigBuilder.validateRequestAndSetDefaults(promoRequest);  }  

У меня есть созданный класс PropertySourceResolver

 @Value("${promoGenerationConfig.prefix.length}")  private Integer prefixLength;  

и мой тестовый класс ниже;

 @ExtendWith(SpringExtension.class) class CodeConfigBuilderTest {   private final PromonRequest promoRequest;  private final PropertySourceResolver propertySourceResolver;  private final PromoService promoService;  private final Request request;   public CodeConfigBuilderTest(PromonRequest promoGenerationRequest, PropertySourceResolver propertySourceResolver, PromoService promoService, Request request) {  this.PromonRequest = PromonRequest ;  this.propertySourceResolver = propertySourceResolver;  this.promoService = promoService;  this.request = request;  }   @Test  void prefixAndPostFixControlAccordingToLength() {   promoService.validateRequest(promoRequest);   int lengthControl = propertySourceResolver.getPrefixLength()   promoRequest.getPostfix().length();   Assertions.assertTrue(true, String.valueOf(lengthControl));   }  

Я перепробовал много вещей, но мой код не проходит тест, в нем написано «org.junit.jupiter.api.расширение.Исключение ParameterResolutionException: Для параметра не зарегистрирован решатель параметров»

любая помощь, спасибо

Комментарии:

1. Подумайте о том, чтобы показать код модульного теста, который не прошел.

2. Спасибо за ваш повтор, который я отредактировал ниже

Ответ №1:

Я не на 100% , но ИМХО вы не можете использовать инъекцию конструктора в модульных тестах.

Используйте это вместо:

 @SpringBootTest class CodeConfigBuilderTest {   @Autowired  private PromonRequest promoRequest;  @Autowired  private PropertySourceResolver propertySourceResolver;  @Autowired  private PromoService promoService;  @Autowired  private Request request;  

Комментарии:

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

2. Что вам нужно знать?

3. Мне нужно написать правильный модульный тест, который в соответствии с моим сценарием ниже; префикс и постфикс не могут быть больше длины

4. @markwhalf ну, Симон Мартинелли ответил на ваш вопрос, я думаю, что остальное вы можете написать и изменить