首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

匹配流
EN

Stack Overflow用户
提问于 2018-10-29 15:10:50
回答 1查看 337关注 0票数 2

我有一个特性,我们称之为F1,它作为两个流返回一个和相同的文件:

代码语言:javascript
运行
复制
* def aPdf1 = read('classpath:pdf.pdf')
* def aPdf2 = read('classpath:pdf.pdf')
* def out = { one: aPdf1, two: aPdf2 }

当我从另一个特性调用F1时,假设是F2,并比较这些流,它们不匹配:

代码语言:javascript
运行
复制
* def out = call read('F1.feature')
* match out.aPdf1 == out.aPdf2

错误是:

com.intuit.karate.exception.KarateException:意外类型:类java.io.BufferedInputStream

这是个虫子吗?或者它是尚未实现的特性?

PS1:如果我将以下行添加到F1中,它将成功地完成:

* match aPdf1 == aPdf2

PS2:利用https://stackoverflow.com/questions/4245863/fast-way-to-compare-inputstreams答案中的代码,我能够匹配F2中的流。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 16:51:23

问题是,您已经创建了一个无效的JSON,它碰巧将二进制流作为值。只要坚持将溪流和溪流进行比较--这将像你已经看到的那样起作用。如果需要将PDF转换为字符串,可以这样做:

代码语言:javascript
运行
复制
* string aPdf2 = read('classpath:pdf.pdf')

此外,您可能已经错过了嵌入式表达式和“封闭的javascript”之间的区别。你是有意这么做的吗?

代码语言:javascript
运行
复制
* def out = ({ one: aPdf1, two: aPdf2 })

或者:

代码语言:javascript
运行
复制
* def out = { one: '#(aPdf1)', two: '#(aPdf2)' }

此外,有关JSON和二进制值的更多上下文-请参阅以下答案:https://stackoverflow.com/a/52541026/143475

编辑:所以,如果您想比较两个流,您必须首先将它们转换为字节数组。尝试这样做,您就可以将您自己的流到字节转换器的实现划分为:

代码语言:javascript
运行
复制
* def Utils = Java.type('com.intuit.karate.FileUtils')
* def stream1 = read('karate-logo.png')
* def bytes1 = Utils.toBytes(stream1)
* def stream2 = read('karate-logo.png')
* def bytes2 = Utils.toBytes(stream2)
* assert java.util.Arrays.equals(bytes1, bytes2)

EDIt -在较新版本的空手道中,您可以将其“强制转换”到bytes,而match关键字也支持字节数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53048448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档