当前位置: 首页 > 知识库问答 >
问题:

Spock框架:匹配通配符参数

萧无尘
2023-03-14

我试图编写一个Spock规范,在这里我想验证一个用三个参数调用的方法。我根本不关心前两个,任何参数类型的实例都可以。我试图使用Spock通配符参数匹配,但不断遇到问题。我的验证如下所示:

    when:
    packageUploadController.handleUpload(httpRequest)

    then: "the value of the 'dest' parameter is passed on to saveservice"
    saveService.saveImportPackage(_ as UploadedPackage, _ as PackageImportResponse.Builder)

这里saveService是一个mock,UploadedPackage和PackageImportResponse.builder是预期的参数;在更改调用SaveService的代码之前,我试图先进行一个有效的测试。

org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
Cannot cast object '_' with class 'org.spockframework.lang.Wildcard' to 
class 'UploadedPackage' due to:
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: 
UploadedPackage(org.spockframework.lang.SpreadWildcard)

我还尝试省略类型,只在(_,_)上匹配,但这也失败了:

org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: 
SaveService$$EnhancerByCGLIB$$67b7324.saveImportPackage() is applicable for argument types: (org.spockframework.lang.Wildcard, org.spockframework.lang.Wildcard) values: [[*_], [*_]]

这里我也认为我是按照文档来做的,不明白为什么会失败(我后来添加了类型来尝试消除这个错误)。

共有1个答案

艾奕
2023-03-14

将1*放入SaveService.SaveImportPackage(_as UploadedPackage,_as PackageImportResponse.Builder),这似乎适用于类似的情况。不完全清楚原因

 then: "the value of the 'dest' parameter is passed on to saveservice"
 1 * saveService.saveImportPackage(_ as UploadedPackage, _ as PackageImportResponse.Builder)
 类似资料:
  • 我试图测试一个具有注入的RESTClient的Groovy类。 更新:我认为问题的核心是是false。如何断言两个闭包的相等性 我发现我可以在Spock中捕获闭包,从闭包构建XML,并比较XML对象。什么是一个简明和可读的方法来实现这一点?

  • 问题内容: 我正在编写一个简单的调试程序,该程序将简单的字符串作为输入,其中可以包含星号以指示通配符匹配-任何 我以为我会简单地采用该模式,转义其中的任何正则表达式特殊字符,然后将其替换为。然后使用正则表达式匹配器。 但是我找不到任何Java函数来转义正则表达式。我能找到的最佳匹配,然而这正好将与在开始和字符串的结尾。 Java中有什么可以让您简单地进行通配符匹配而不必从头开始实现算法的? 问题答

  • 问题内容: 有没有一种方法可以使用querySelector或进行通配符元素名称匹配querySelectorAll?我看到属性查询中支持通配符,但不支持元素本身。 我要解析的XML文档基本上是一个简单的属性列表,我需要查找名称中包含某些字符串的元素。 我意识到,如果我需要的话,XML文档可能需要进行重组,但这不会发生。 除了返回使用显然不推荐使用的XPath(IE9删除了它)之外,任何解决方案都

  • 是否可以在$match中执行OR? 我的意思是这样的:

  • 是否可以使参数验证集与通配符一起工作? 我希望在位置接受0-100。 错误消息: 无法验证参数“variable”得参数.参数“6.1.1.0”不属于集合“6.1...”由ValidateSet属性指定。提供一个集合中的参数,然后重试该命令。+CategoryInfo:InvalidData:(:)[],ParentContainsErrorRecordException+FullyQualifi

  • 问题 你想使用 Unix Shell 中常用的通配符(比如 *.py , Dat[0-9]*.csv 等)去匹配文本字符串 解决方案 fnmatch 模块提供了两个函数—— fnmatch() 和 fnmatchcase() ,可以用来实现这样的匹配。用法如下: >>> from fnmatch import fnmatch, fnmatchcase >>> fnmatch('foo.txt',