问题描述
由于某些原因(我对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
区块中