在 Spock 中模拟 super#method()
Mocking super#method() in Spock
免责声明:有一个问题看起来很相似,但实际上不同:Mocking a Superclass in Spock
例如:
class Bar {
def method(){
return 'bar'
}
}
class Foo extends Bar {
def method() {
super.method() + ' foo'
}
}
我想单独测试 Foo
,即我想模拟 Bar
,例如:
def "test"() {
given:
def foo = GroovySpy(Foo)
when:
def result = foo.method()
then:
1 * ((Bar) directive).generate() >> 'mockBar'
result == 'mockBar foo'
}
这显然行不通,但给出了我正在努力实现的想法。有什么想法吗?
如果你只想模拟的话只是一个想法Bar.method()
:
class Foo extends Bar {
def superMethod() {
super.method()
}
def method() {
superMethod() + ' foo'
}
}
你的测试:
def "test"() {
given:
def foo = new Foo() {
@Override
def superMethod() {
'mockBar'
}
}
expect:
foo.method() == 'mockBar foo'
}
我刚刚知道如何做到这一点。
我放了以下内容:
then:
1 * foo.method()
0 * foo._
它给了我在我从 when:
调用之后调用的确切方法,我这样说:
then:
1 * foo.super$method()
我不确定 $
是从哪里来的,也许是继承级别之类的,我想如果你尝试一下,你可能会有不同的数字。
免责声明:有一个问题看起来很相似,但实际上不同:Mocking a Superclass in Spock
例如:
class Bar {
def method(){
return 'bar'
}
}
class Foo extends Bar {
def method() {
super.method() + ' foo'
}
}
我想单独测试 Foo
,即我想模拟 Bar
,例如:
def "test"() {
given:
def foo = GroovySpy(Foo)
when:
def result = foo.method()
then:
1 * ((Bar) directive).generate() >> 'mockBar'
result == 'mockBar foo'
}
这显然行不通,但给出了我正在努力实现的想法。有什么想法吗?
如果你只想模拟的话只是一个想法Bar.method()
:
class Foo extends Bar {
def superMethod() {
super.method()
}
def method() {
superMethod() + ' foo'
}
}
你的测试:
def "test"() {
given:
def foo = new Foo() {
@Override
def superMethod() {
'mockBar'
}
}
expect:
foo.method() == 'mockBar foo'
}
我刚刚知道如何做到这一点。
我放了以下内容:
then:
1 * foo.method()
0 * foo._
它给了我在我从 when:
调用之后调用的确切方法,我这样说:
then:
1 * foo.super$method()
我不确定 $
是从哪里来的,也许是继承级别之类的,我想如果你尝试一下,你可能会有不同的数字。