Groovy Spock测试未正确存根-收到null

问题描述

由于某些原因(我对Spock不太了解,并且对模拟和存根还是陌生的),我无法获得一种特定的方法来存根我想要的东西。

我已经简化了一些内容,但是基本上我有一个搜索返回的书籍清单。每本书都有一个if (CurStep = ssDone)。本书可能有旧的或较新的版本,但是它们都具有相同的workId-如果用户选择,则可以获取所有其他版本。

前言


类别:版本

workId

类:EditionResults 用于获取单个作品的其他版本

class Edition {
    //some strings,ints,and booleans -- information about the edition
}

最后一堂课:BulkEditions ,用于打包多本作品(搜索结果页上有10本书)

class EditionResults {
    List<Edition> editionsList
    String parentWorkId
}

这个控制器是我遇到麻烦的地方

class BulkEditions {
    List<EditionResults> bulkEditions
}

尤其是,我在测试@RequestMapping('/api') class EditionsController { @Autowired private EditionsService editionsService private Logger logger = LoggerFactory.getLogger(EditionsController) @RequestMapping(value = '/bulkeditions',produces = 'application/json') ResponseEntity<BulkEditions> getBulkEditions( @RequestParam(value = 'workIds') Set<String> workIds ) throws Exception { BulkEditions newBulkEditions = new BulkEditions(bulkEditions: []) workIds.each { workId -> EditionResults editions = editionsService.searchEditions(workId) logger.info "EditionResults {}",editions if (editions?.editionsList) { newBulkEditions.bulkEditions << editions } } new ResponseEntity<BulkEditions>(newBulkEditions,HttpStatus.OK) } } 的真实分支时遇到了麻烦-由于某些原因,我一直收到editions?.editionsList的{​​{1}}


这是我的测试的样子(它总是通过,但是三叶草覆盖失败)

null

我的问题是这部分:

editions

我不明白为什么我会(从记录器中)继续找回来

class EditionsControllerSpec extends Specification {

    private final EditionsService editionsService = Mock(EditionsService)
    private static final Set<String> WORK_ID_SET = '12345' as Set<String>
    private static final String SINGULAR_WORK_ID = '12345'

    @Subject
    private final EditionsController controller = new EditionsController(editionsService: editionsService)

    void 'test get bulk editions'() {
        given:
        EditionResults editionResults = Mock(EditionResults)
        Edition edition = GroovyMock(Edition) //it's a java class
        edition.isAvailable >> true
        //edition.bunchOfOtherProps >> randomValues

        editionResults.editionsList >> [edition]
        editionResults.parentWorkId >> SINGULAR_WORK_ID
    
        editionsService.searchEditions(SINGULAR_WORK_ID) >> editionResults

        when:
        ResponseEntity<BulkLocalEditions> response = controller.getBulkEditions(WORK_ID_SET)

        then:
        response
    }


我的理解是editionsService.searchEditions(SINGULAR_WORK_ID) >> editionResults 等同于说“当我们点击此[Test worker] INFO [EditionsController:100] [doCall] EditionResults ***null*** 方法时,使其结果为editionsService.searchEditions(SINGULAR_WORK_ID) >> editionResults” –我们已经填充了该方法。...那么它怎么为空?


我已经尝试过尽可能详细,整洁地回答问题,为简洁起见,但请让我知道是否需要其他信息,当然,谢谢。

还值得一提的是,它实际上可以在我的本地计算机上正常运行,并且一切都可以正确返回-只是三叶草的覆盖范围让我

解决方法

感谢@tim_yates

editionsService.searchEditions(SINGULAR_WORK_ID) >> editionResults应该在我的then区块中

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...