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

匹配MarkupBuilder闭包的Spock参数

东门深
2023-03-14

我试图测试一个具有注入的RESTClient的Groovy类。

class MyService {
     def restClient

     def put() {
         restClient.put(
              path: "foo",
              contentType: "XML",
              body: { foo { bar(baz) }}
         )
     }
}
@TestFor(MyService)
class MyServiceSpec extends Specification {

    RESTClient restClient = Mock()

    def setup() {
        service.restClient = restClient
    }

    def "posts to restClient"() {
         when:
         service.put()

         then:
         1 * service.restClient.put([
              path: "foo",
              contentType: "XML",
              body: { foo { bar(baz) }}
         ])
    }
}

更新:我认为问题的核心是{foo()}=={foo()}是false。如何断言两个闭包的相等性

我发现我可以在Spock中捕获闭包,从闭包构建XML,并比较XML对象。什么是一个简明和可读的方法来实现这一点?

共有1个答案

伍胡媚
2023-03-14

可以使用Spock中的_(undescore运算符)匹配“任何东西”

then:
         1 * service.restClient.put(_) 

应该能正常工作

 类似资料:
  • 我试图编写一个Spock规范,在这里我想验证一个用三个参数调用的方法。我根本不关心前两个,任何参数类型的实例都可以。我试图使用Spock通配符参数匹配,但不断遇到问题。我的验证如下所示: 这里是一个mock,UploadedPackage和PackageImportResponse.builder是预期的参数;在更改调用SaveService的代码之前,我试图先进行一个有效的测试。 我还尝试省略类

  • 闭包作为参数(Taking closures as arguments) 现在我们知道了闭包是 trait,我们已经知道了如何接受和返回闭包;就像任何其它的 trait! 这也意味着我们也可以选择静态或动态分发。首先,让我们写一个获取可调用结构的函数,调用它,然后返回结果: fn call_with_one<F>(some_closure: F) -> i32 where F : Fn(i

  • 如何监视Spock/Groovy中的闭包或代理? Spock有一个限制,您不能使用以下样式的交互测试模式: 这是可行的,如果有点笨拙,但显然有一个更动态的“闭包”类比一个我必须添加所有潜在数量的参数的类更好。 那么,是否可能有一个更动态的解决方案(如何?),或者使用或这一事实是否禁止了一个更动态的监视类?

  • 问题内容: 我需要为某些数据集创建一个匹配查找器系统,如下所示: 有一组对象,每个对象都由一个字符串标识。 每个对象正好具有N个属性P i。每个属性值都是一个字符串。 N = 3的数据库示例(在现实生活中,N = 8)。 系统必须返回s 集,匹配对象属性上的给定查询。在查询中,用户必须指定所有属性值。或者,对于查询中的某些或所有属性,用户可以指定“通配符” ,这意味着任何属性值都将与条件匹配。 查

  • 考虑以下功能: 当然,我们可以像这样调用它: 但是,提供显式闭包参数会导致编译器抱怨: 这是您的意图吗?阅读的留档时,我没有找到关于参数是否始终被包装的语句,即使在提供闭包时也是如此。我对的理解是: 接受闭包参数。如果参数不是闭包,但与闭包返回的类型相同,则包装它。 然而,我看到的行为是:无论如何都要包装参数。 一个更详细的例子使这在我看来很奇怪: 现在假设我想散列值的键: 为了澄清:的类型是 参