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 ...
随机推荐
- C# Enum,Int,String,之间及bool与int之间的转换
枚举类型的基类型是除 Char 外的任何整型,所以枚举类型的值是整型值. Enum 提供一些实用的静态方法: (1)比较枚举类的实例的方法 (2)将实例的值转换为其字符串表示形式的方法 (3)将数字的 ...
- Openlayer4 - 最好最强大的开源地图引擎
Openlayer4 - 最好最强大的开源地图引擎 # githubhttps://github.com/openlayers/openlayers # 官网http://openlayers.org ...
- Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package
Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package 1. 统计的lib jar 列表1 2. Code3 3. 常用包名按找字母排序(2000个)4 ...
- [ci]安装配置jenkins及其插件
后面尝试ms模式部署多台jenkins 安装jenkins:(hudson是jenkins的商业版) cd /etc/yum.repos.d/ wget http://pkg.jenkins.io/r ...
- script
实例 链接一个外部脚本文件: <script type="text/javascript" src="myscripts.js"></scri ...
- VS2013-解决VS2013 4996错误
由于微软在VS2013中不建议再使用C的传统库函数scanf,strcpy,sprintf等,所以直接使用这些库函数会提示C4996错误,在源文件中添加以下指令就可以避免这个错误提示. )
- cf #363 c
C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Jetty锁定文件的问题
在windows系统上,jetty默认在运行时会锁定部署的文件.这对于需要在程序运行期间动态生成或改动某些文件就变得不能执行!对于这一点,Jetty的官网上专门有文章进行了解释:http://docs ...
- Java 十进制和十六制之间的转化(负数的处理)
原文: http://www.cnblogs.com/literoad/archive/2013/01/25/2875908.html 在一些情况下,我们需要将数字在十进制和十六制下互相转化. 在Ja ...
- Play on Words UVA - 10129 欧拉路径
关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...