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

Spock测试Spring Boot应用遇MissingMethodException问题求助

问题解决:Groovy测试中get()方法找不到的异常

嘿,你这是踩了个静态导入的小坑!报错里的MissingMethodException明明白白告诉你:当前测试类里找不到get()方法的定义——这个方法其实是org.springframework.test.web.servlet.request.MockMvcRequestBuilders类里的静态方法,你没把它静态导入,所以Groovy以为你要调用测试类自己的get()方法,自然就报错了。

具体解决步骤:

  • 补充静态导入:在测试类的import部分,加上MockMvcRequestBuilders.get的静态导入,这样就能直接在代码里用get('/hello')了。
  • 清理冗余配置:你加的@ContextConfiguration和空的MockConfig其实是多余的——@WebMvcTest注解已经会自动帮你配置Web层的测试上下文,包括自动注入MockMvc,这些额外配置反而可能干扰测试环境。

修改后的完整测试代码:

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.test.web.servlet.MockMvc
import spock.lang.Specification
import spock.lang.Unroll

@WebMvcTest(TestController)
class TestControllerSpec extends Specification {
    @Autowired
    MockMvc mvc;

    @Unroll
    def "spring context loads for web mvc slice"() {
        expect: "controller is available"
        mvc.perform(get('/hello')).andExpect(status().isOk())
    }
}

额外说明:

如果之后需要用其他请求方法(比如post()、put()),同样要从MockMvcRequestBuilders里静态导入对应的方法。这样修改后,你的测试应该就能正常运行,验证/hello接口返回200状态码了。

内容的提问来源于stack exchange,提问作者pise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:32:52