Spring Boot单元测试

发表于:2018-9-07 11:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:日进一步    来源:博客园

  一个测试类包含下面两个注解:
  @RunWith(SpringRunner.class)
  @SpringBootTest
  测试类中可直接注入接口:
  @Resource
  MyServerMgr myServerMgr;

  在方法上加@Test表示它是个测试方法:
  @Test
  public void query() {
  String result = myServerMgr.query();
  log.info("test query result is {}.", result);
  //使用断言判断结果
  assertEquals(result, "query result");
  }

  可以通过@Before和@After注解修饰的方法,来表示测试方法执行前和执行后的行为。
  @Before
  public void setUp() throws Exception {
  log.info("Before setUp.");
  }
  @After
  public void tearDown() throws Exception {
  log.info("After tearDown.");
  }
  至此一个简单的单元测试就完成了。
  Spring Mock MVC:模拟Servlet容器里的测试控制器。
  下面部分介绍如何测试Spring Controller API。
  Controller测试类需要额外增加@WebAppConfiguration注解:
  @RunWith(SpringRunner.class)
  @SpringBootTest
  @WebAppConfiguration
  需要在测试类中注入WebApplicationContext:
  @Resource
  private WebApplicationContext webApplicationContext;
  需要使用MockMvc模拟发送rest请求,所以需要定义MockMvc变量并在测试方法执行前初始化它:
  private MockMvc mockMvc;
  @Before
  public void setUp() throws Exception {
  log.info("set mockmvc");
  mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
  // mockMvc = MockMvcBuilders.standaloneSetup(webApplicationContext).build();
  }

  需要说明的是,Mock MVC有两种构建方式:
  standaloneSetup:手工创建并配置的控制器。
  webAppContextSetup:根据Spring应用程序上下文来构建Mock MVC。
  我们采用webAppContextSetup方式。
  使用@Test注解声明测试方法:
  @Test
  public void query() throws Exception {
  mockMvc.perform(get("/myapp"))
  .andExpect(status().isOk())
  .andExpect(content().string("query result"));
  }
  总结一下:
  1、需要熟悉并掌握@RunWith(SpringRunner.class)、@SpringBootTest、@Before、@After、@Test几个注解的用法。
  2、测试服务端接口和测试Controller的不同是Controller需要额外的加载上下文并初始化MockMvc,并通过MockMvc模拟发送rest请求,通过断言判定结果是否正确。

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号