Когда я макетирую абстрактный или конкретный класс с парой получатель / установщик и затем получаю доступ к свойству, соответствующий вызывающий / установщик никогда не вызывается. Тем не менее, это работает нормально, если Mock
создан для интерфейса. В приведенном ниже коде есть 3 набора по два теста в каждом (один получатель тестирования, а другой установщик), и они идентичны, за исключением того, что они насмехаются. Первый набор работает нормально, потому что они тестируют на интерфейсе, но следующие два набора не делают:
import spock.lang.Specification
interface Foo {
public String getProp();
public void setProp(String val);
}
abstract class FooBase implements Foo {
public abstract String getProp();
public abstract void setProp(String val);
}
class FooImpl extends FooBase {
public String getProp() {
println('Foo.getProp')
return null
}
public void setProp(String val) {
println('Foo.setProp')
}
}
class TestPropertyAccess extends Specification {
def 'test setter on interface'() {
given:
def foo = Mock(Foo)
when:
foo.prop = 'val'
then:
1 * foo.setProp(_)
}
def 'test getter on interface'() {
given:
def foo = Mock(Foo)
when:
foo.prop
then:
1 * foo.getProp()
}
def 'test setter on abstract'() {
given:
def foo = Mock(FooBase)
when:
foo.prop = 'val'
//foo.setProp('val')
then:
1 * foo.setProp(_)
//1 * foo.setProperty('prop', 'val')
}
def 'test getter on abstract'() {
given:
def foo = Mock(FooBase)
when:
foo.prop
//foo.getProp()
then:
1 * foo.getProp()
//1 * foo.getProperty('prop')
}
def 'test setter on concrete'() {
given:
def foo = Mock(FooImpl)
when:
foo.prop = 'val'
//foo.setProp('val')
then:
1 * foo.setProp(_)
//1 * foo.setProperty('prop', 'val')
}
def 'test getter on concrete'() {
given:
def foo = Mock(FooImpl)
when:
foo.prop
//foo.getProp()
then:
1 * foo.getProp()
//1 * foo.getProperty('prop')
}
}
Я могу заставить сработавшие тесты работать, если я замените доступ к свойству соответствующим геттером / сеттером или, если я проверю универсальный c getProperty
/ setProperty
.
Я что-то упустил или это может быть ошибкой?