Unit testing spock中then子句中闭包的含义

Unit testing spock中then子句中闭包的含义,unit-testing,mocking,spock,stubbing,Unit Testing,Mocking,Spock,Stubbing,我们正在使用Spock编写单元测试用例,我无法理解下面的代码片段,在修改声明的那一节中 then: 1 * service.fraudMigrationOnboardingService.onboard(_) >> {merchantId -> successCallBack.call(response)} 以上代码的含义是什么。因为你的问题缺乏细节,我不得不对你的测试进行推测和有根据的猜测:-/ 因此,您有一个服务,其中有一个成员或getterfraudMi

我们正在使用Spock编写单元测试用例,我无法理解下面的代码片段,在修改声明的那一节中

then:
1 * service.fraudMigrationOnboardingService.onboard(_) >> 
    {merchantId ->   successCallBack.call(response)}

以上代码的含义是什么。

因为你的问题缺乏细节,我不得不对你的测试进行推测和有根据的猜测<代码>:-/

  • 因此,您有一个
    服务
    ,其中有一个成员或getter
    fraudMigrationOnboardingService

  • fraudMigrationOnboardingService
    有一种方法
    车载
    采用单个参数

  • 显然,
    fraudMigrationOnboardingService
    是一个模拟或间谍,这就是为什么您可以在它上面检查像
    1*…
    这样的交互

  • 编写此测试的开发人员,以及您似乎羞于询问其含义的开发人员,或者您的公司已经离职的开发人员,希望在测试过程中调用方法
    (可能是通过
    服务
    )时发生特定的事情:回调方法调用。因此,她声明了stub
    {merchantId->successCallBack.call(response)}
    方法,以替代在这种情况下
    板载(41;
    通常会执行的操作。在间谍中,它将执行原始方法;在模拟中,它将什么都不执行。但很明显,这不是期望的行为,可能是因为测试依赖于不同的行为

一般来说,我认为一个难以阅读的测试应该重构,但无论如何,我在这里复制您的情况:

package de.scrum\u master.stackoverflow
导入spock.lang.Specification
类DummyTest扩展了规范{
静态类服务{
欺诈船服务欺诈船服务
void doSomething(字符串名称){
打印“做点什么”
欺诈船上服务(姓名)
}
}
静态类FraudMigrationOnboardingService{
船上无效(字符串名称){
println“登机时$name”
}
}
静态类成功回调{
无效调用(int-httpResponse){
println“回调HTTP响应=$httpResponse”
}
}
def“某些维修测试”(){
鉴于:
def onboardingService=Mock(FraudMigrationOnboardingService)
def服务=新服务(fraudMigrationOnboardingService:onboardingService)
def successCallBack=new successCallBack()
def响应=200
什么时候:
服务剂量测量(“ACME公司”)
然后:
1*服务。欺诈非船上服务。船上()>>
{merchantId->successCallBack.call(response)}
}
}
控制台日志显示:

做某事
回调HTTP响应=200
如果您要注释掉
>{merchantId->successCallBack.call(response)}
,它将只打印

做某事
对于模拟,如果您还将
mock(FraudMigrationOnboardingService)
更改为
Spy(FraudMigrationOnboardingService)
它将打印

做某事
登船ACME公司。


更新:也许你还不明白收尾意味着什么,我不确定。因此,我将进一步解释它:正如我所说,它只是
板载(String)
方法的存根。方法参数映射到
merchantId
,但未在存根方法中使用。相反,会触发回调。

欢迎使用SO。请学习如何提问,而不让喜欢帮助你猜测实际情况的人继续猜测。你应该始终提供一个(请阅读文章!)。这是你的免费照片,我无论如何都要回答。用有限的细节回答这个问题很好