Spock Mock 未更新字段

问题描述 投票:0回答:1

假设我们有一个要模拟的类。

class Apple {
 Color color
 bool isFresh
}

我们用 Mock 来模拟它。我们执行需要测试的代码。模拟的 Apple 对象的

Color color
已更新。但是,该字段保持为空。

// test class
Apple apple = Mock(Apple.class)

myService.myMethod(apple)

assert apple.color == Color.RED //FAIL because apple.color == null 
// tested code of myMethod(Apple apple) 
apple.color = Color.RED
groovy grails spock
1个回答
0
投票

蒂姆和西蒙都是对的。使用模拟时,您应该不会对获得模拟结果感到惊讶,即

null

我知道要单独测试

MyService
,你需要模拟
Apple
。但是,请验证 setter 上的交互,而不是隐式调用 getter 并期望非空结果。

package de.scrum_master.stackoverflow.q78458317

import spock.lang.Specification

import java.awt.*

class MyServiceTest extends Specification {
  def test() {
    given:
    def myService = new MyService()
    Apple apple = Mock(Apple)

    when:
    myService.myMethod(apple)

    then:
    1 * apple.setColor(Color.RED)
  }
}

class Apple {
  Color color
  boolean isFresh
}

class MyService {
  void myMethod(Apple apple) {
    apple.color = Color.RED
  }
}

Groovy Web Console 中尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.