编写简单的SpringBoot单元测试类
⽬录
简单总结下SpringBoot开发中常⽤到的两个单元测试⽅法:
(1) Spring Boot 测试
(2) Spring MVC 测试
⼀、引⼊测试依赖
⾸先引⼊SpringBoot测试的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
依赖 spring-boot-starter-test 测试模块,其中包括JUnit、Hamcrest、Mockito
在spring-boot中,模块的依赖都是以starter的⽅式进⾏,以 spring-boot-starter-⽅式命名,指明了具体的模块。spring-boot⽣态中提供了丰富的starter供开发者使⽤。
⼆、 Spring Boot 测试
SpringBoot的单元测试⾮常简单,只要在测试类上,添加@RunWith和@SpringBootTest注解就可以了。
⽰例代码如下(注:此代码不能直接执⾏,只做结构展⽰):
1、注解解释:
(1)@RunWith
是⼀个测试运⾏器,JUnit所有的测试⽅法都有测试运⾏器负责执⾏。
JUnit为单元测试提供了⼀个默认的测试运⾏器BlockJUnit4Runner,但是没有限制必须使⽤默认的运⾏
器。
SpringRunner是SpringJUnit4ClassRunner(BlockJUnit4Runner的拓展)的别名。像这样,@RunWith(JUnit4.Class)就是指定⽤JUnit4来运⾏。
(2)@SpringBootTest
它可以⽤作标准spring-test
@ContextConfiguration注释的替代⽅法。注解的⼯作原理是通过SpringApplication在测试中创建ApplicationContext。
所以Spring1.4以上的版本⼀般情况下是这样的:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootStarterTests {
}
在普通Spring项⽬中的测试⼀般情况下是这样的:
@ContextConfiguration(locations={"l", "l", "l"}) public class MemberTest {
}
@BeforeClass:针对所有测试,只执⾏⼀次,且必须为static void
@Before  :执⾏测试⽅法前执⾏
@After  :执⾏测试⽅法后执⾏
@Test :测试⽅法
@AfterClass:针对所有测试,只执⾏⼀次,且必须为static void
⼀个单元测试类的执⾏顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass
每⼀个测试⽅法的调⽤顺序为:
@Before -> @Test -> @After
⼆、Spring MVC 测试
测试Controller接⼝,需添加注解@WebAppConfiguration
@SpringBootTest
@WebAppConfiguration
public class UserServiceImplTest {
@Autowired
private UserService userService;
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void before(){
// 指定WebApplicationContext,将会从该上下⽂获取相应的控制器并得到相应的MockMvc        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
LogUtils.info("单元测试开始执⾏...");
}
@Test
public void selectUser() throws Exception {
mockMvc.perform(
post("localhost:8080/demo/User/getUser")
.contentType(MediaType.APPLICATION_JSON_UTF8) // 传参格式
.content("{\"name\":\"xiaohong\"}") // JSON 格式传参
)
适合新手的spring boot.andExpect(status().isOk()) // 添加断⾔
.andDo(MockMvcResultHandlers.print()) // 打印操作
.andReturn();
}
@After
public void after(){
LogUtils.info("单元测试执⾏结束...");
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。