【问题标题】:Unit Test could not pass due to constructur error由于构造错误,单元测试无法通过
【发布时间】:2021-12-24 22:58:12
【问题描述】:

我正在努力编写单元测试,当我测试我的代码块时,它说:构造函数错误

下面是我的代码;

@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 >= 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.extension.ParameterResolutionException: No ParameterResolver registered for parameter”

任何帮助,谢谢

【问题讨论】:

  • 考虑显示失败的单元测试代码。
  • 感谢您的重播,我在下面编辑了

标签: java spring-boot unit-testing junit java-8


【解决方案1】:

我不是 100%,但恕我直言,您不能在单元测试中使用构造函数注入。

改用这个:

@SpringBootTest
class CodeConfigBuilderTest {

    @Autowired
    private PromonRequest promoRequest;
    @Autowired
    private PropertySourceResolver propertySourceResolver;
    @Autowired
    private PromoService promoService;
    @Autowired
    private Request request;

【讨论】:

  • 感谢您的回答,我认为我无法编写适当的单元测试,请您更正我的代码,谢谢
  • 你需要知道什么?
  • 我需要根据下面的场景编写一个适当的单元测试;前缀和后缀不能大于长度
  • @markwhalf 很好,SimonMartinelli 回答了你的问题,我认为剩下的你可以写和改变
猜你喜欢
  • 2020-10-23
  • 1970-01-01
  • 2021-05-18
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多