spring boot如何在Groovy类中模拟Java可选类,该类扩展了Spock规范
我有一个非常简单的春假服务。下面是我的Java ServiceImpl类:-
- 服务执行类=>;
@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. }); ) } }
- 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)作为可选设置,则会出现以下两个错误:-
- 不能铸造类
- 如果没有“作为可选项”,它会给我“在impletestclass中没有匹配的构造函数”李>
我们如何处理这件事?这里使用的DB是Mongo
多谢各位
# 1 楼答案
您不能通过常规方法直接模拟类
Optional
,因为该类是最终类,并且Spock模拟基于动态代理,即子分类。但是模仿Pojo1
并将其包装成一个Optional
怎么样像往常一样,您可以存根POJO的方法,验证某些方法是否被调用过多次等等