Java SpringBootRestController作为单元测试中的内部类(webmvctest)

Java SpringBootRestController作为单元测试中的内部类(webmvctest),java,spring-boot,unit-testing,spring-mvc,inner-classes,Java,Spring Boot,Unit Testing,Spring Mvc,Inner Classes,是否有可能在测试上下文中声明RestController,最好是作为spring引导测试的内部类?我确实需要一个特定的测试设置它。我已经尝试过以下作为POC的简单示例: import org.junit.jupiter.api.Test; 导入org.junit.jupiter.api.extension.extensedWith; 导入org.springframework.beans.factory.annotation.Autowired; 导入org.springframework.bo

是否有可能在测试上下文中声明RestController,最好是作为spring引导测试的内部类?我确实需要一个特定的测试设置它。我已经尝试过以下作为POC的简单示例:

import org.junit.jupiter.api.Test;
导入org.junit.jupiter.api.extension.extensedWith;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient;
导入org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
导入org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
导入org.springframework.test.context.junit.jupiter.SpringExtension;
导入org.springframework.test.web.servlet.MockMvc;
导入org.springframework.test.web.servlet.ResultActions;
导入org.springframework.web.bind.annotation.GetMapping;
导入org.springframework.web.bind.annotation.RestController;
导入静态org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
导入静态org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@ExtendWith(SpringExtension.class)
@WebMvcTest(ExampleTest.TestController.class)
@AutoConfigureMockMvc
@自动配置Web客户端
公共类示例测试{
@自动连线
私有MockMvc-MockMvc;
@试验
public void exampleTest()引发异常{
ResultActions ResultActions=this.mockMvc
.执行(获取(“/测试”);
结果
.andDo(print());
}
@RestController
公共静态类TestController{
@GetMapping(“/test”)
公共字符串测试(){
回复“你好”;
}
}
}

不过,通过MockMvc测试端点可以实现404。我遗漏了什么吗?

问题是,
TestController
没有加载到应用程序上下文中。可以通过添加

@ContextConfiguration(类=ExampleTest.TestController.class)

测试将如下所示:

@ExtendWith(SpringExtension.class)
@WebMvcTest(ExampleTest.TestController.class)
@ContextConfiguration(classes= ExampleTest.TestController.class)
@AutoConfigureMockMvc
@AutoConfigureWebClient
public class ExampleTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void exampleTest() throws Exception {
        ResultActions resultActions = this.mockMvc
                .perform(get("/test"));
        resultActions
                .andDo(print());
    }

    @RestController
    public static class TestController {
        @GetMapping("/test")
        public String test() {
            return "hello";
        }
    }

}
以及输出:

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"5"]
     Content type = text/plain;charset=UTF-8
             Body = hello
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

就这样!非常感谢!虽然(在使用它的时候)不得不为我关于spring安全性的特定测试设置向ContextConfiguration添加一些配置类,但那是另一回事了。