You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:12:03