Spring Boot 提供了一些实用程序和注解,用来帮我们测试应用程序。测试由两个模块支持——spring-boot-test包含了核心项目,而spring-boot-test-autoconfigure支持自动配置测试。
使用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
例子
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Autowired
DeviceService deviceService; //要测试的service
@BeforeClass
public static void classBefore() {
System.out.println("在每个类加载之前执行");
}
@AfterClass
public static void classAfter() {
System.out.println("在每个类加载之后执行");
}
@Before
public void before() {
System.out.println("在每个测试方法之前执行");
}
@After
public void after() {
System.out.println("在每个测试方法之后执行");
}
/**
* 测试service
*/
@Autowired
UserService userService;
@Test
//事务回滚
@Transactional
public void updateLoginTime() {
int i = userService.updateLoginTime(1);
Assert.assertEquals(1, i);
}
private MockMvc mvc;
private MockMvc loginMvc;
@Before
public void setUp() throws Exception {
//初始化
mvc = MockMvcBuilders.standaloneSetup(new CentralMonitorController()).build();
loginMvc = MockMvcBuilders.standaloneSetup(new LoginController()).build();
}
/**
* 测试controller调用 这里只测试url调用,GET
* @throws Exception
*/
@Test
public void list() throws Exception {
String url = "/central/wesker/group/list";
MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(url).accept(MediaType.APPLICATION_JSON)).andReturn();
int status = mvcResult.getResponse().getStatus();
Assert.assertEquals(200, status);
String content = mvcResult.getResponse().getContentAsString();
System.out.println("content : " + content);
}
/**
* 测试controller调用,POST
* @throws Exception
*/
@Test
public void login() throws Exception {
Map<String,String> user = new HashMap<>(3);
user.put("admin","wesker");
user.put("pwd","123");
String url = "/central/login";
MvcResult mvcResult = loginMvc.perform(MockMvcRequestBuilders.post(url)
.content(JSON.toJSONString(user))
.contentType(MediaType.APPLICATION_JSON))
.andReturn();
int status = mvcResult.getResponse().getStatus();
Assert.assertEquals(200, status);
String content = mvcResult.getResponse().getContentAsString();
System.out.println(content);
}
@RunWith 是JUnit标准和一个注解,用来告诉JUnit单元测试框架不要使用内置的方式进行单元测试,而应使用 RunWith 指明的类来提供单元测试,所有的 Spring 单元测试总是使用SpringRunner.class
@SpringBootTest 用于 Spring Boot 应用测试, 它默认会根据包名逐级往上找,一直找到 Spring Boot 主程序,也就是通过类注解是否包含@SpringBootApplication来判断是否是主程序,并在单元测试的时候启动该类来创建Spring上下文环境。
@Transactional 是用于事务回滚的注解。因为此处测试的是往数据库里添加数据,我们希望Service测试完毕后,数据能自动回滚。但nosql一般不支持回滚
单元测试中不准使用System.out进行人肉验证,必须使用assert进行验证
网友评论