一。概述

二、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. Atitit.java相比c#.net的优点 优缺点  v2 q330

    Atitit.java相比c#.net的优点 优缺点  v2 q330 1. 跨平台可在LINUX上,mac跑以外.主要如下: 1 2. IDE ECLIPSE(500m)是绿色的,换机器不用安装,C ...

  2. atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29

    atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29 1. 三 绑定方式的介绍1 2. To接口,链式绑定,用的最多的1 3. toC ...

  3. Java客户端Jedis

    使用Jedis的Java客户端 maven依赖 <!-- jedis --> <dependency> <groupid>redis.clients</gro ...

  4. C# AppDomain 类

    /*** AppDomain 表示应用程序域,它是一个应用程序在其中执行的独立环境.无法继承此类. 应用程序域(由 AppDomain 对象表示)为执行托管代码提供隔离.卸载和安全边界. 使用应用程序 ...

  5. jquery通过val()取不到textarea中的值

    小编定义了一个textarea控件,却无法根据id取到textarea对象并赋值. 经过实验,得出了原因.代码如下: <!DOCTYPE html> <html> <he ...

  6. angular总结控制器的三种主要职责: 为应用中的模型设置初始状态 通过$scope对象把数据模型或函数行为暴露给视图 监视模型的变化,做出相应的动作

    m1.双向数据绑定: <body> <div ng-app ng-init="user.name='world'"> <h1>使用NG实现双边数 ...

  7. c#序列化和反序列化list

    List<UserData> lstStuModel = new List<UserData>() { new UserData(){Name="001", ...

  8. 读写文件,用代码在讲html文件转为jsp文件

    package my.testguava; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputSt ...

  9. [已解决]windows下python3.x与python2.7共存版本pip使用报错问题

    > 由于最近要更新插件,突然发现没法使用pip来安装升级插件,查了一圈才找到解决办法,特记录在此,便于其它人查询. 报错信息如下: Fatal error in launcher: Unable ...

  10. pip依赖安装与记录

    pip freeze requirements.txt是一个常常被许多Flask应用用于列出它所依赖的包的文本文件.它是通过pip freeze > requirements.txt生成的. 使 ...