• SpringBoot测试


    加入依赖:

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    

    测试时,需要在Test类上加两句注解

    @RunWith(SpringRunner.class)

    @SpringBootTest

    基本测试,以测service为例:

    package com.ah.test;
    
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.stereotype.Service;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SbTest4Service {
    	@Autowired
    	UserService service;
    
    	@Test
    	public void m() {
    		System.out.println("---使用断言做一个测试");
    		Assert.assertTrue(service.isLogin());
    	}
    }
    
    @Service
    class UserService {
    	public boolean isLogin() {
    		return true;
    	}
    }
    

    测Controller,比较麻烦,因为正常运行时,是通过浏览器访问Controller。

    SpringBoot使用MockMvc进行控制层测试。

    mock:模拟的。

    以下示例,使用了Restfull风格API,分别演示了MockMvc测试的四种情况:

    • 分段写法
    • 链式写法
    • 传json
    • 获取json
    package com.ah.test;
    
    import javax.servlet.http.HttpSession;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.http.MediaType;
    import org.springframework.mock.web.MockHttpSession;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.ResultActions;
    import org.springframework.test.web.servlet.ResultMatcher;
    import org.springframework.test.web.servlet.request.*;
    import org.springframework.test.web.servlet.result.*;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.context.WebApplicationContext;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    
    public class SbTest4Controller {
    	@Autowired
    	private WebApplicationContext webApplicationContext;
    
    	private MockMvc moc;
    	private MockHttpSession session;
    
    	@Before
    	public void setupMockMvc() {
    		moc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    		session = new MockHttpSession();
    		// 设置已登录用户(很多时候网站都会有登录要求)
    		session.setAttribute("user", "Cat");
    	}
    
    	@Test
    	public void get() throws Exception {
    		MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/testCtrl/get");
    		builder = builder.session(session);
    		ResultActions resultActions = moc.perform(builder);
    		// 判断状态
    		ResultMatcher resultMatcher = MockMvcResultMatchers.status().isOk();
    		resultActions = resultActions.andExpect(resultMatcher);
    	}
    
    	@Test
    	public void insert() throws Exception {
    		// 链式写法
    		moc.perform(MockMvcRequestBuilders.post("/testCtrl/insert").session(session))
    				.andExpect(MockMvcResultMatchers.status().isOk());
    	}
    
    	@Test
    	public void update() throws Exception {
    		// 传json(控制器需要@RequestBody)
    		String json = "{"id":"123"}";
    
    		MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.put("/testCtrl/update")
    				.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)
    				.content(json.getBytes()).session(session);
    
    		moc.perform(builder).andExpect(MockMvcResultMatchers.status().isOk());
    	}
    
    	@Test
    	public void delete() throws Exception {
    		// 判断返回Json是否正确,并查看返回信息(可以看全部返回的json)
    		MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.delete("/testCtrl/delete").session(session);
    
    		moc.perform(builder).andExpect(MockMvcResultMatchers.status().isOk())
    				.andExpect(MockMvcResultMatchers.jsonPath("$.id").value("456")).andDo(MockMvcResultHandlers.print());
    		;
    	}
    
    }
    
    @RestController
    @RequestMapping("/testCtrl")
    class MyController {
    	@GetMapping(value = "/get")
    	public void get(HttpSession session) {
    		System.out.println("get:" + session.getAttribute("user"));
    	}
    
    	@PostMapping(value = "/insert")
    	public void insert() {
    		System.out.println("---insert");
    	}
    
    	@PutMapping(value = "/update")
    	public void update(@RequestBody String json) {
    		System.out.println("---json = " + json);
    		System.out.println("---update");
    	}
    
    	@DeleteMapping(value = "/delete")
    	public String delete() {
    		System.out.println("---delete");
    		return "{"id":"456"}";
    	}
    }
    
  • 相关阅读:
    Hibernate 配置双向多对多关联
    转 方法区(method) )、栈区(stack)和堆区(heap)之JVM 内存初学
    java web 实战经典(二)
    flex 生成多边形时内、外环计算
    java web 开发实战经典(一)
    sql语句联表更新(从一个数据库中的一张表更新到另一个数据库的另一张表)
    javascript DOM编程艺术(检测与性能优化)
    java数据库基本操作(sqlserver 2000为例)
    同一台电脑上配置多个解压版tomcat方法(本例安装两个)
    css那些事(一)
  • 原文地址:https://www.cnblogs.com/tigerlion/p/12950717.html
Copyright © 2020-2023  润新知