如何在Grails Spock规范测试中仅Mock单个Domain静态方法?
仅Mock Domain类单个静态方法的Spock解决方案
在Spock测试中,你可以使用GroovySpy替代GroovyMock来实现仅Mock指定静态方法、保留其余方法原行为的需求:
def "测试目标方法,仅Mock Domain.list()"() { given: def domain1 = new Domain(/* 初始化参数 */) def domain2 = new Domain(/* 初始化参数 */) // 使用GroovySpy,全局生效但保留原类的默认行为 GroovySpy(Domain, global: true) { // 仅对list()方法设置Mock返回值 list() >> [domain1, domain2] } when: def testResult = 你的测试类.调用list的业务方法() // 其他静态方法仍会执行原逻辑 def otherStaticResult = Domain.其他静态方法() then: testResult == [domain1, domain2] // 验证其他静态方法的正常执行结果 otherStaticResult == 预期的原方法返回值 }
核心区别说明
GroovyMock会完全替换目标类的所有行为,未显式Mock的方法会默认返回null或空值,导致其他静态方法失效。GroovySpy默认会委托原类的实现逻辑,仅对你显式指定Mock的方法(这里是list())覆盖返回值,其余方法保持原有的功能。
内容的提问来源于stack exchange,提问作者user2572790
相关产品推荐
相关产品推荐

