Spock 中的模拟决赛 class
Mock final class in Spock
spock 可以模拟 final 类 吗?如果是这样,如何?搜索结果显示 gist,这似乎暗示了这一点,但我找不到任何这样做的例子。我还发现论坛帖子说不支持模拟最终 类。
本规范:
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def 'lol'() {
given:
def s = Mock(String) {
size() >> 10
}
expect:
s.size() == 10
}
}
以下列异常结束:
JUnit 4 Runner, Tests: 1, Failures: 1, Time: 29 Test Failure:
lol(Test) org.spockframework.mock.CannotCreateMockException:
Cannot create mock for class java.lang.String because Java mocks cannot mock final classes.
If the code under test is written in Groovy, use Groovy mock.
解决方法是使用GroovyMock
:
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def 'lol'() {
given:
def s = GroovyMock(String) {
size() >> 10
}
expect:
s.size() == 10
}
}
效果很好。
有一个第三方库 https://github.com/joke/spock-mockable 似乎可以完成这项工作。不知道为什么它不那么受欢迎。
spock 可以模拟 final 类 吗?如果是这样,如何?搜索结果显示 gist,这似乎暗示了这一点,但我找不到任何这样做的例子。我还发现论坛帖子说不支持模拟最终 类。
本规范:
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def 'lol'() {
given:
def s = Mock(String) {
size() >> 10
}
expect:
s.size() == 10
}
}
以下列异常结束:
JUnit 4 Runner, Tests: 1, Failures: 1, Time: 29 Test Failure:
lol(Test) org.spockframework.mock.CannotCreateMockException:
Cannot create mock for class java.lang.String because Java mocks cannot mock final classes.
If the code under test is written in Groovy, use Groovy mock.
解决方法是使用GroovyMock
:
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def 'lol'() {
given:
def s = GroovyMock(String) {
size() >> 10
}
expect:
s.size() == 10
}
}
效果很好。
有一个第三方库 https://github.com/joke/spock-mockable 似乎可以完成这项工作。不知道为什么它不那么受欢迎。