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
相关产品推荐
相关产品推荐

