有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

spring boot如何在Groovy类中模拟Java可选类,该类扩展了Spock规范

我有一个非常简单的春假服务。下面是我的Java ServiceImpl类:-

  1. 服务执行类=>;
    @AllArgsConstructor(onConstructor = (@__(@Autowired)))
    public Class ServiceImpl implements ServiceClass {
    
    
        private ServiceRepository repo;
        private MapstructRequestMapper1 mapper1;
    
    
        private Optional<Pojo1> pojo1;
    
        @Override
        public Optional<Pojo1> getSomething(Pojo2 pojo2, String someString){ return repository.findById(Id)};
    
        @Override
        public SomeResponse createSomething(Pojo2 pojo2, String someString){
    
            pojo1 = getSomething(someString); //This Returns an Optional object.
    
            if(pojo1.ifPresent(pojo1-> {
    
                    //set something with pojo1's attributes and then do something.
    
            });
            )
    
        }
    
    }
    
    
    
  2. Impltest类:-(使用Groovy+Spock规范)

    def ref = Mock(Servicerepo)
    def mapperRef1 = Mock(MapstructRequestMapper1)
    //This is where I am stuck

    def requestTestObj = Mock(Pojo1)

    def service = new ServiceImpl(ref,mapperRef1, requestTestObj) //This is where it fails.

    def "myTest - some bla" () {

    }


}

错误=>;如果我尝试将def requestTestObj=Mock(Pojo1)作为可选设置,则会出现以下两个错误:-

  1. 不能铸造类
  2. 如果没有“作为可选项”,它会给我“在impletestclass中没有匹配的构造函数”

我们如何处理这件事?这里使用的DB是Mongo

多谢各位


共 (1) 个答案

  1. # 1 楼答案

    您不能通过常规方法直接模拟类Optional,因为该类是最终类,并且Spock模拟基于动态代理,即子分类。但是模仿Pojo1并将其包装成一个Optional怎么样

    def requestTestObj = Mock(Pojo1)
    def service = new ServiceImpl(ref, mapperRef1, Optional.of(requestTestObj))
    

    像往常一样,您可以存根POJO的方法,验证某些方法是否被调用过多次等等