如何使用Spock在测试方法中模拟对象的新实例

时间:2020-05-25 10:09:36

标签: java unit-testing groovy mocking spock

我想用spock测试类似的Java方法。

   Service apiService;

   public List<String> getDataList() {
   ResultHolder resultValues = new ResultHolder();
   if (apiService.invokeCall(resultValues) == 0){
       return Arrays.asList(resultValues.getValue());
   }
   retrun null;
}

在调用服务后,ResultHolder对象的内部成员将作为结果更改。 我如何(有可能?)在每次调用构造函数时强制spock返回一个模拟对象,以便我可以控制resultValues.getValue()。

在测试环境中,我已经尝试使用groovy间谍,但是在构造ResultHolder时它没有返回相同的实例。

given:
    def resultHolder = GroovySpy(ResultHolder, global: true)
    resultHolder.getValue() >> ["myValue"]
    service.invokeCall(resultHolder) >> 0
when:
    result = myServiceImpl.getDataList()
then:
    result == expected

当前,由于新构造的ResultHolder的值设置为null,我得到了NPE。

0 个答案:

没有答案