我有一个带有以下内容的示例Spring Boot应用程序
引导主类
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }
控制者
@RestController @EnableAutoConfiguration public class HelloWorld { @RequestMapping("/") String gethelloWorld() { return "Hello World!"; } }
为控制器编写单元测试的最简单方法是什么?我尝试了以下操作,但它抱怨无法自动连接WebApplicationContext
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = DemoApplication.class) public class DemoApplicationTests { final String BASE_URL = "http://localhost:8080/"; @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testSayHelloWorld() throws Exception{ this.mockMvc.perform(get("/") .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")); } @Test public void contextLoads() { } }
Spring MVC提供了一个StandaloneSetup,它支持测试相对简单的控制器,而无需上下文。
通过注册一个或多个@Controller的实例并以编程方式配置Spring MVC基础结构来构建MockMvc。与普通的单元测试类似,这可以完全控制控制器的实例化和初始化以及它们的依赖性,同时还可以一次测试一个控制器。
控制器的示例测试可以很简单
public class DemoApplicationTests { private MockMvc mockMvc; @Before public void setup() { this.mockMvc = standaloneSetup(new HelloWorld()).build(); } @Test public void testSayHelloWorld() throws Exception { this.mockMvc.perform(get("/") .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")); } }