021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试
一。概述
二、Junit方式使用
2.1、基本使用
eclipse在新建的类上,右键→new→Junit Test Case,修改一下Source folder,选择src/test/java,下一步,选择需要测试的方法即可.
idea mac上在类内,cmd+shift+T,即可
1》在测试类开头增加
@RunWith(SpringRunner.class)
@SpringBootTest
示例如下
待测试类
@Repository
public class UserDao {
public Integer addUser(String username) {
System.out.println("user dao adduser [username="+username+"]");
if(username==null) {
return 0;
}
return 1;
}
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest { @Autowired
private UserDao userDao; @Test
public void testAddUser() {
Assert.assertEquals(Integer.valueOf(1), userDao.addUser("s"));
Assert.assertEquals(Integer.valueOf(0), userDao.addUser(null));
}
}
2.2、加载测试Bean
1》增加测试configuration
/**
* 只能测试环境下使用
* 只能用@TestConfiguration 不能使用@Configuration
*
*/
@TestConfiguration
public class TestBeanConfiguration { @Bean
public Runnable createRunnable() {
return ()->{};
}
}
2》在调用类处增加如下
@RunWith(SpringRunner.class)
@SpringBootTest(classes=TestBeanConfiguration.class)
2.3、测试配置文件
可以读取src/main/resources,也可以使用src/test/resources,如果有相同的优先使用测试环境配置,
@RunWith(SpringRunner.class)
@SpringBootTest
public class EnvTest {
@Autowired
private ConfigurableEnvironment env; @Test
public void testEnv() {
Assert.assertEquals("springboot", env.getProperty("app.name"));
}
}
2.4、指定配置项
@RunWith(SpringRunner.class)
@SpringBootTest(properties= {"app.version=1.0.0"})
或者
@Before
public void init() {
EnvironmentTestUtils.addEnvironment(env, "app.admin.name=admin");
}
三、mock方式
3.1、测试接口,提前预估一些量
@RunWith(SpringRunner.class)
public class UserMapperTest { @MockBean
private UserMapper usermapper; @Before
public void init() {
BDDMockito.given(usermapper.createUser("admin")).willReturn(Integer.valueOf(1));
BDDMockito.given(usermapper.createUser("")).willReturn(Integer.valueOf(0));
BDDMockito.given(usermapper.createUser(null)).willThrow(NullPointerException.class);
} @Test(expected = NullPointerException.class)
public void testCreateUser() {
Assert.assertEquals(Integer.valueOf(1), usermapper.createUser("admin"));
Assert.assertEquals(Integer.valueOf(0), usermapper.createUser(""));
Assert.assertEquals(Integer.valueOf(0), usermapper.createUser(null));
}
}
四、Controller测试
第一种使用:TestRestTemplate
1》需要测试类增加
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
2》需要使用TestRestTemplate 需运行在web环境
@Autowired
private TestRestTemplate restTemplate;
示例:
需要被测试的Controller
@RestController
public class BookController {
@GetMapping("/book/home")
public String home() {
System.out.println("/book/home url is invode.");
return "home";
} @GetMapping("/book/show")
public String show(String id) {
System.out.println("/book/show url is invode.");
return "book" + id;
}
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class BookControllerTest { @Autowired
private TestRestTemplate restTemplate; @Test
public void testHome() {
String object = restTemplate.getForObject("/book/home", String.class);
Assert.assertEquals("home", object);
} @Test
public void testShow() {
String object = restTemplate.getForObject("/book/show?id=100", String.class);
Assert.assertEquals("book100", object);
}
}
第二种使用:MockMvc
1》配置
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = BookController.class)
2》程序使用
@Autowired
private MockMvc mvc;
示例,对以上示例测试
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = BookController.class)
public class BookControllerTest2 { @Autowired
private MockMvc mvc; @Test
public void testHome() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk());
mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("home"));
} @Test
public void testShow() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/book/show").param("id", "400"))
.andExpect(MockMvcResultMatchers.status().isOk());
mvc.perform(MockMvcRequestBuilders.get("/book/show").param("id", "400"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("book400"));
}
}
现将BookController改造,增加了Dao使用
@RestController
public class BookController {
@Autowired
private UserDao userDao;
@GetMapping("/book/home")
public String home() {
System.out.println("/book/home url is invode.");
return "home";
} @GetMapping("/book/show")
public String show(String id) {
System.out.println("/book/show url is invode.");
userDao.addUser("");
return "book" + id;
}
}
现在使用第二种方式,不能通过,因为WebMvcTest(controllers = BookController.class)方式只是加载指定类,没有加载Spring全部容器,所以第二种只能测试controller,依赖需要自己mock
使用第一种方式,加载Spring全部容器。
如果使用第二种,还需要加载全部容器
第三种、MockMv加载全部容器
@SpringBootTest不能和@WebMvcTest同时使用
如果使用MockMvc对象的话需要使用一下方式
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class BookControllerTest3 { @Autowired
private MockMvc mvc; @Test
public void testHome() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk());
mvc.perform(MockMvcRequestBuilders.get("/book/home")).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("home"));
}
}
021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试的更多相关文章
- Spring Boot 解决方案 - JUnit 测试
简单的 JUnit 项目 回顾一下创建并运行简单的 JUnit 测试项目,先添加 JUnit 依赖然后编写类似如下模板的测试类,使用 IDE 的话直接用插件运行就行, 使用 Maven 的话运行命令 ...
- Spring Boot 整合 Shiro ,两种方式全总结!
在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...
- Spring Boot 整合Junit和redis
14. Spring Boot整合-Junit 目标:在Spring Boot项目中使用Junit进行单元测试UserService的方法 分析: 添加启动器依赖spring-boot-starter ...
- Spring Boot配置过滤器的两种方式
过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验.权限控制.敏感词过滤等,下面介绍下Spring Boot配置过 ...
- Java框架spring Boot学习笔记(三):Controller的使用
Controller注解介绍 @Controller:处理http请求 @RestController: Spirng4之后新加的注解,其实是一个组合注解等同于@ResponseBody和@Contr ...
- Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)
最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢 ...
- 基于Spring Boot框架开发的一个Mock
背景:在项目后端接口开发还未完成,我们无法进行自动化接口用例的调试,希望与开发同步完成接口自动化用例的编写及调试,待项目转测后,可以直接跑自动化用例,提高测试效率. 选用的maven + Spring ...
- Spring Boot的web开发&静态资源配置方式
Web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 1.1. 自动配置的ViewResolve ...
- 干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结
目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE ...
- 【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...
随机推荐
- linux 实时显示文件的内容
1. watch -n 1 aa.txt #每个1秒显示aa.txt的内容 2. tail -f ***.log Linux shell中有一个tail命令,常用来显示一个文件的最后n行文档内容 但 ...
- [精]Oracle 11G数据库VMware虚拟机下载
虚拟机文件下载地址: http://pan.baidu.com/s/1pJL5Tub 备份一个防止失效 https://pan.baidu.com/s/1nvbZQad Readme文件: 数据库版本 ...
- deepin下安装python的Tkinter库
在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...
- SQL中使用视图的优点和缺点是什么
视图的优点与缺点 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避短,视图具有如下的一些优点: ● 简单性.视图不仅可以简化用户对数据的理解,也可以简化他们的操作.那些被经常使用的查询可以被定义 ...
- Java进阶01 String类(转载)
String类包含在java.lang包中.这个包会在Java启动的时候自动import,所以可以当做一个内置类(built-in class).我们不需要显式的使用import引入String类. ...
- Spectral Graph Theory的一些定理
邻接矩阵的特征值和特征向量不会随着节点的排列不同而变化.两个图同构可以推出他们的邻接矩阵具有相同的特征值和特征向量,但是反过来不行.
- redis python交互和实际例子
import redis try: r=redis.StrictRedis(host='localhost',port=6379) except Exception,e: print e.messag ...
- python 面向对象三大特性(封装 多态 继承)
今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...
- android模拟器怎么直接安装apk
方法一:进入adb的tools目录,下面有adb.exe如图, 在cmd下进入tools目录,然后输入adb install apk路径,就行了 方法二:直接写一个批处理文件 运行就行了.
- Android 图片压缩的方法大全
public static Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in = ne ...