一。概述

二、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测试的更多相关文章

  1. Spring Boot 解决方案 - JUnit 测试

    简单的 JUnit 项目 回顾一下创建并运行简单的 JUnit 测试项目,先添加 JUnit 依赖然后编写类似如下模板的测试类,使用 IDE 的话直接用插件运行就行, 使用 Maven 的话运行命令 ...

  2. Spring Boot 整合 Shiro ,两种方式全总结!

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...

  3. Spring Boot 整合Junit和redis

    14. Spring Boot整合-Junit 目标:在Spring Boot项目中使用Junit进行单元测试UserService的方法 分析: 添加启动器依赖spring-boot-starter ...

  4. Spring Boot配置过滤器的两种方式

    过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验.权限控制.敏感词过滤等,下面介绍下Spring Boot配置过 ...

  5. Java框架spring Boot学习笔记(三):Controller的使用

    Controller注解介绍 @Controller:处理http请求 @RestController: Spirng4之后新加的注解,其实是一个组合注解等同于@ResponseBody和@Contr ...

  6. Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)

    最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢 ...

  7. 基于Spring Boot框架开发的一个Mock

    背景:在项目后端接口开发还未完成,我们无法进行自动化接口用例的调试,希望与开发同步完成接口自动化用例的编写及调试,待项目转测后,可以直接跑自动化用例,提高测试效率. 选用的maven + Spring ...

  8. Spring Boot的web开发&静态资源配置方式

    Web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 1.1. 自动配置的ViewResolve ...

  9. 干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结

    目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE ...

  10. 【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...

随机推荐

  1. 获取表数据的插入SQL

    DECLARE @TABLE_NAME VARCHAR(200) SET @TABLE_NAME = 'myFunction' --表名 DECLARE @TABLE_CONDITION VARCHA ...

  2. Linux C 中 open close read write 使用实例

    这里实现的是将文件cody.txt中的内容拷贝到to_cody.txt中去. 1 /* ======================================================== ...

  3. vivado与modelsim的联合仿真(一)

    vivado软件中也自带仿真工具,但用了几天之后感觉仿真速度有点慢,至少比modelsim慢挺多的.而modelsim是我比较熟悉的一款仿真软件,固然选它作为设计功能的验证.为了将vivado和mod ...

  4. Html添加百度地图

    方法/步骤 1.打开“百度地图生成器”的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在“1.定位中心点”中,切换城市,并 ...

  5. C#中基本类型占用字节数

    bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ...

  6. linux 下安装svn服务

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  7. ubi实际使用

    ubifs号称性能比yaffs2 好,同时压缩可读写,文件系统image体较小同时可写.1. uboot使能对UBIFS的支持#define CONFIG_CMD_NAND#define CONFIG ...

  8. 使用加密的squid配合stunnel实现HTTP代理

    现在大部分人都是用ssh tunnel来搭建socks5代理,其实这种方式效率并不高,ssh tunnel并不是为了做代理而存在的.一个比较好的方法是加密squid配合stunnel实现http代理. ...

  9. 如何查询当前手机的cpu架构,so库导入工程又出异常了?

    执行adb命令: adb shell cat /proc/cpuinfo 对应文件夹 AArch64 == arm64-v8a ARMv7 == armeabi-v7a ............等 其 ...

  10. Bootstrap -- 标签属性

    @.aria-label和aria-labelledby 用于屏幕阅读器 原文:https://blog.csdn.net/liuyan19891230/article/details/5045283 ...