模拟Spock的最后一堂课

Jul*_* A. 8 final mocking spock

可以嘲笑模拟最后的课程吗?如果是这样,怎么样?搜索结果提出了这个要点,这似乎意味着如此,但我找不到任何这样做的例子.我还发现论坛帖子说不支持模拟最终类.

Opa*_*pal 20

本规范:

@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        
    }
}
Run Code Online (Sandbox Code Playgroud)

以以下例外结束:

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.
Run Code Online (Sandbox Code Playgroud)

解决方案是使用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        
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个效果很好.

  • @JulianA。这也是我的经验:GroovyMock对于大多数Java类final方法似乎没有帮助。我想澄清一下...! (3认同)

Fau*_*rel 6

有一个第三方库https://github.com/joke/spock-mockable似乎可以完成这项工作。不知道为什么它不那么受欢迎。