Unit testing Grails单元测试通过引用不';嘲弄别人的时候不管用

Unit testing Grails单元测试通过引用不';嘲弄别人的时候不管用,unit-testing,grails,mocking,spock,Unit Testing,Grails,Mocking,Spock,我有一个单元测试,其中我模拟一个服务类来保存一个域。最初,我的控制器方法如下所示: def save(Long organizationId, Convention convention) { conventionService.save(organizationId, convention) if (convention.hasErrors()) { response.status = HttpStatus.UNPROCESSABLE_ENTITY.value() r

我有一个单元测试,其中我模拟一个服务类来保存一个域。最初,我的控制器方法如下所示:

def save(Long organizationId, Convention convention) {
  conventionService.save(organizationId, convention)

  if (convention.hasErrors()) {
    response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()
    respond convention.errors
  } else {
    response.status = HttpStatus.CREATED.value()
    respond convention
  }
}
通常,这是因为Java是通过引用传递的,所以传递到save方法中的
约定
在整个方法中都是相同的
约定
对象。但是,在模拟
conventionService.save
方法时,按引用传递不起作用。调整我的方法以解决此问题:

def save(Long organizationId, Convention convention) {
  convention = conventionService.save(organizationId, convention)

  if (convention.hasErrors()) {
    response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()
    respond convention.errors
  } else {
    response.status = HttpStatus.CREATED.value()
    respond convention
  }
}
允许我的测试通过,因为
约定
对象是我对模拟的期望:

1 * service.save(1, _) >> new Convention(
       id: 1,
       name: 'Con 1',
       description: 'This is a pretty cool convention, everyone should go',
       startDate: new Date(),
       endDate: new Date()+10,
       organization: organization)
我的问题是,这是预期的行为还是我应该报告的bug

我的问题是,这是预期的行为还是我应该成为的bug 报道


这是预期的行为。这不是您应该报告的错误。

谢谢Jeff。我也这么想,但想确定一下。我将在几周内解释这一点。“我将在几周内解释这一点。”-你知道怎么做吗?我相信是的。我理解它关于嘲弄的基本逻辑。我只是想确定没有任何Spock或Groovy/Grails魔法会操纵我的期望。