添加POM文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
一、测试Controller
//本篇是用来测试Controller接口
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class SpringbootTestController {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception{
//从WebApplicationContext里面获取相应的控制器并得到相应的MockMvc;
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
/**
* 1、mockMvc.perform执行一个请求。
* 2、MockMvcRequestBuilders.get("XXX")构造一个请求。
* 3、ResultActions.param添加请求传值
* 4、ResultActions.accept(MediaType.TEXT_HTML_VALUE))设置返回类型
* 5、ResultActions.andExpect添加执行完成后的断言。
* 6、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情
* 比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
* 5、ResultActions.andReturn表示执行完成后返回相应的结果。
*/
@Test
public void getHello() throws Exception{
MvcResult mvcResult= mockMvc.perform(MockMvcRequestBuilders.get("/hello")
.param("name","lvgang")
.accept(MediaType.TEXT_HTML_VALUE))
// .andExpect(MockMvcResultMatchers.status().isOk()) //等同于Assert.assertEquals(200,status);
// .andExpect(MockMvcResultMatchers.content().string("hello lvgang")) //等同于 Assert.assertEquals("hello lvgang",content);
.andDo(MockMvcResultHandlers.print())
.andReturn();
int status=mvcResult.getResponse().getStatus(); //得到返回代码
String content=mvcResult.getResponse().getContentAsString(); //得到返回结果
Assert.assertEquals(200,status); //断言,判断返回代码是否正确
Assert.assertEquals("hello lvgang",content); //断言,判断返回的值是否正确
}
/*
在上面的测试类中,我们用到了这么一个类MockMvcRequestBuilders用来构建请求的,此类有以下主要的API:
MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据uri模板和uri变量值得到一个GET请求方式的MockHttpServletRequestBuilder;如get(/user/{id}, 1L);
MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables):同get类似,但是是POST方法;
MockHttpServletRequestBuilder put(String urlTemplate, Object... urlVariables):同get类似,但是是PUT方法;
MockHttpServletRequestBuilder delete(String urlTemplate, Object... urlVariables) :同get类似,但是是DELETE方法;
MockHttpServletRequestBuilder options(String urlTemplate, Object... urlVariables):同get类似,但是是OPTIONS方法;
MockHttpServletRequestBuilder request(HttpMethod httpMethod, String urlTemplate, Object... urlVariables): 提供自己的Http请求方法及uri模板和uri变量,如上API都是委托给这个API;
MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... urlVariables):提供文件上传方式的请求,得到MockMultipartHttpServletRequestBuilder;
RequestBuilder asyncDispatch(final MvcResult mvcResult):创建一个从启动异步处理的请求的MvcResult进行异步分派的RequestBuilder;
http://t.zoukankan.com/jimmyshan-study-p-10975684.html
*/
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SpringbootTestController2 {
@Autowired
private MockMvc mockMvc;
@Test
public void helloTest() {
MvcResult mvcResult = null;
try {
mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/hello")
.accept(MediaType.TEXT_HTML_VALUE)
.param("name", "hello"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
System.out.println(mvcResult.getResponse().getContentAsString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、测试Service
/**
* 本篇是用来测试Service里面的方法
* @author jiangleilei
* @date 2022/6/21 10:55 下午
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootTestService {
@Autowired
private UserService userService;
//测试Service
@Test
public void testService() {
PageInfo<UserDomain> allUser = userService.findAllUser(1, 10);
System.out.println(allUser);
}
}
三、测试Mapper
/**
* 本篇是用来测试Mapper接口
* @author jiangleilei
* @date 2022/6/22 10:09 上午
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringBootTestMapper {
@Autowired
private UserDao userDao;
@Test
public void testDao(){
List<UserDomain> userDomains = userDao.selectUsers();
System.out.println(userDomains);
}
}
四、测试Configuration
/**
* 本篇是用来测试ContextConfiguration注解
* @author jiangleilei
* @date 2022/6/22 10:13 上午
*/
@RunWith(SpringRunner.class)
@ContextConfiguration(classes= ConfigTest.class) //classes属性只能放被@Configration修饰的注解
public class SpringBootTestConfig {
//@ContextConfiguration(locations="../applicationContext.xml") 也可以指定配置文件
//@ContextConfiguration(classes = SimpleConfiguration.class) 指定带了@Configration注解的类
//@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" }) 指定多配置文件
@Autowired
private TestBean testBean;
@Test
public void xx(){
testBean.xx();
}
}
@Configuration
public class ConfigTest {
@Bean
public TestBean getTestBean(){
return new TestBean();
}
}
五、测试classes
/**
* 本篇是测试@SpringBootTest注解的属性class
* @author jiangleilei
* @date 2022/6/22 10:18 上午
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Springboot2MybatisDemoApplication.class)
public class SpringBootTestClass {
@Autowired
private UserService userService;
@Test
public void xx(){
PageInfo<UserDomain> allUser = userService.findAllUser(1, 1);
System.out.println(allUser);
}
}