#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 ну, Симон Мартинелли ответил на ваш вопрос, я думаю, что остальное вы можете написать и изменить