Groovy 捕捉参数并在测试的其他部分使用它们
所以我想捕获传递到mock中的参数并设置它们,以便测试中的其他东西可以使用它们Groovy 捕捉参数并在测试的其他部分使用它们,groovy,spock,Groovy,Spock,所以我想捕获传递到mock中的参数并设置它们,以便测试中的其他东西可以使用它们 class FileServiceSpec extends Specification { @Shared FileEntity originalFileUploadEntity def fileRepository = Mock(FileRepository) def fileStorageClient = Mock(FileStorageClient) def fileConverter
class FileServiceSpec extends Specification {
@Shared
FileEntity originalFileUploadEntity
def fileRepository = Mock(FileRepository)
def fileStorageClient = Mock(FileStorageClient)
def fileConverter = Mock(FileConverter)
def fileMapper = new FileMapperImpl()
def fileService = new FileService(fileRepository, fileStorageClient, fileConverter, fileMapper)
def"upload offline canvas file requires conversion"(){
given: " a file that requires conversions"
def file = fileUploadRequest("test.pptx")
def content = "dGVzdCBmaWxl"
def taskId = "100"
FileEntity convertedFileUploadEntity
FileEntity originalFileUploadEntity
when:
def resp = fileService.uploadOfflineCanvasUploadAndConvertedUpload(file, content, taskId);
then:
1 * fileConverter.convertPptxToPdf(*_) >> Base64.getDecoder().decode("convertedpdfcontent");
//the converted file is uploaded
1 * fileStorageClient.uploadFile(_, Base64.getDecoder().decode("convertedpdfcontent" )) >> {args ->
convertedFileUploadEntity = FileEntity.class.cast(args[0])
assert FileEntity.class.cast(args[0]).fileName == "test.pdf"
assert FileEntity.class.cast(args[0]).entityName == "offline-canvas-converted-upload"
};
//the original file is uploaded
1 * fileStorageClient.uploadFile(_, Base64.getDecoder().decode(content )) >> {args ->
originalFileUploadEntity = FileEntity.class.cast(args[0])
assert FileEntity.class.cast(args[0]).fileName == "test.pptx"
assert FileEntity.class.cast(args[0]).entityName == "offline-canvas-upload"
};
}
如您所见,我能够捕获参数并设置其值,如以下所示:originalFileUploadEntity=FileEntity.class.cast(args[0])。但是,一旦我退出lambda,该值将再次变为null,因此在第一个方法捕获中,我设置了它,并且在调试时可以看到它,但是在第二个方法参数捕获中,我在第一个方法捕获中设置的属性现在为null,这样它必须工作:
def "upload offline canvas file requires conversion"() {
given: " a file that requires conversions"
def file = fileUploadRequest("test.pptx")
def content = "dGVzdCBmaWxl"
def taskId = "100"
def expectedDecodedContent = Base64.getDecoder().decode("convertedpdfcontent")
FileEntity convertedFileUploadEntity = null
FileEntity originalFileUploadEntity = null
when:
def resp = fileService.uploadOfflineCanvasUploadAndConvertedUpload(file, content, taskId);
then:
1 * fileConverter.convertPptxToPdf(*_) >> expectedDecodedContent;
1 * fileStorageClient.uploadFile(_, expectedDecodedContent) >> { convertedFileUploadEntity = it[0] as FileEntity }
convertedFileUploadEntity.fileName == "test.pdf"
convertedFileUploadEntity.entityName == "offline-canvas-converted-upload"
1 * fileStorageClient.uploadFile(_, Base64.getDecoder().decode(content)) >> { originalFileUploadEntity = it[0] as FileEntity }
originalFileUploadEntity.fileName == "test.pptx"
originalFileUploadEntity.entityName == "offline-canvas-upload"
}
如果uploadFile
方法返回FileEntity
实例,那么它在您的案例中不起作用,因为您不从闭包返回它,而是执行断言
在本例中,闭包返回值convertedFileUploadEntity
:
1 * fileStorageClient.uploadFile(_, expectedDecodedContent) >> {
convertedFileUploadEntity = it[0] as FileEntity
}
因为它与:
1 * fileStorageClient.uploadFile(_, expectedDecodedContent) >> {
convertedFileUploadEntity = it[0] as FileEntity
return convertedFileUploadEntity
}
但在本例中,闭包不会返回它:
1 * fileStorageClient.uploadFile(_, expectedDecodedContent) >> {
convertedFileUploadEntity = it[0] as FileEntity
assert convertedFileUploadEntity.fileName == "test.pdf"
}