在模拟实例中,getProperty('name')和getName()有什么区别?我以为它们的意思是一样的,但是有时候spock不满意其中一个,所以我不得不在它们之间切换。
假设我有以下类:
class Person {
String name
}
我正在测试另一个旨在更新人员的类,所以我可以像这样做:
void "test something"() {
Person personMock = Mock(Person)
when:
someObject.updatePersonName(personMock, 'new name')
then:
1 * personMock.getName() >> 'old name'
1 * personMock.setName('new name')
}
简化测试的细节并不重要,重要的是我要验证某个属性是否被读取和更新。有时当我运行测试时会收到投诉,说personMock.getName()从未被调用,并且它很贴心地显示了personMock.getProperty('name')被调用。如果我重写测试来使用那种形式,测试就通过了。直到一段时间后,它再次抱怨getProperty('name')没有被调用,而是getName()。
我知道Spock不可能如此容易出错。我一定犯了错误。那么我应该在什么情况下使用getName(),在什么情况下使用getProperty('name')呢?
getProperty
调用映射到正确的 getter 方法,即规范化调用以始终在模拟对象上使用getter。这不是由JavaMockInterceptor
完成的。因此,在引用您引用之前的文档中适用该句话:“需要一些独特的 Groovy 模拟功能”,即处理 Groovy MOP 方法。 - Leonard Brünings