Spring Boot 解决方案 - JUnit 测试
简单的 JUnit 项目
回顾一下创建并运行简单的 JUnit 测试项目,先添加 JUnit 依赖然后编写类似如下模板的测试类,使用 IDE 的话直接用插件运行就行, 使用 Maven 的话运行命令 mvn test 就能看到测试结果。
public class Tests {
@Test
public void test() {
// ...
}
}
执行顺序
为满足一些测试对环境的要求,例如数据库连接及关闭,JUnit 提供了一系列注解来在测试前后进行操作,以下为注解运行的顺序的介绍。
@BeforeClass运行测试类前执行且只执行一次@Before每个测试方法执行前执行@Test测试方法,每个测试方法的顺序也可以指定@After每个测试方法执行后执行@AfterClass运行测试类后执行且只执行一次
上面提到测试方法也可以指定顺序,利用 @FixMethodOrder 标注测试类。
@FixMethodOrder(MethodSorters.DEFAULT)
public class Tests {
// ...
}
MethodSorters 有三种取值,分别
代表不同的执行顺序。
DEFAULT由方法名的 hashcode 值大小决定执行顺序,若值一样则根据方法名的字典顺序NAME_ASCENDING由方法名的字典顺序决定执行顺序JVM由 JVM 返回的方法名的顺序决定
断言
JUnit 的 org.junit.Assert 类提供了一系列静态方法用来断言,当断言不成立时会调用 fail 抛出 AssertionError 的异常,也可手动调用 fail 来抛出异常,下面列表为该类提供的静态方法。
- assertTrue
- assertFalse
- assertNull
- assertNotNull
- assertSame
- assertNotSame
- assertEquals
- assertArrayEquals
- assertThat
- fail
assertEquals 与 assertSame 区别
阅读源码可以知道,assertEquals 是调用对象的 equals 方法进行比较,而 assertSame 则是直接用 == 进行比较。
所以用 assertSame 来断言值类型或者内存地址是否相等,而用 assertEquals 来断言对象的 equals 方法是否为真。
assertThat 与 Matcher
assertThat 利用 matcher 匹配器来进行断言,其中一个方法签名如下所示。
assertThat(T actual, Matcher<T> matcher)
org.hamcrest.CoreMatchers 类中提供了匹配器静态的方法,可静态导入里头所有的方法,如下为用 assertThat 实现 assertTrue 的例子。
import static org.hamcrest.CoreMatchers.*;
public class Tests {
@Test
public void test() {
assertThat(true, is(true)); // same as assertTure()
}
}
另外还可以自定义匹配器,推荐继承 BaseMatcher<T> 抽象类而不是实现 Matcher<T> 接口,下面为一个简单的例子。
public class Tests {
private static Contains contains(String substring) {
return new Contains(substring);
}
@Test
public void test() {
assertThat("test", contains("t"));
}
}
class Contains extends BaseMatcher<String> {
private String substring;
public Contains(String substring) {
this.substring = substring;
}
@Override
public boolean matches(Object str) {
return ((String)str).contains(substring);
}
@Override
public void describeTo(Description description) {
// ...
}
}
Spring Boot 使用 JUnit
Spring Boot 中无需任何配置,就能使用 JUnit 来测试,下面是 Spring Boot 项目的自带的测试模板。
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
}
}
指定运行环境及加载配置
测试类标注了两个注解 ,JUnit 提供的 @RunWith 注解来指定运行环境,这里指定了 SpringRunner 即 Spring 的运行环境。
@SpringBootTest 注解则用来加载所需 Spring 环境所需要的配置,这样就可以在测试环境中自动装载所需要的 Bean 。
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
Foo foo;
@Test
public void contextLoads() {
foo.bar();
}
}
加速测试
当有些测试不需要加载整个 Spring Boot 环境时,可以将 @SpringBootTest 改用 @ContextConfiguration 注解只加载所需配置,这样可以加速测试,下面例子是只需要 DemoConf 类的配置。当完全不需要 Spring 环境来测试时,还可以去掉 @RunWith 注解。
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = DemoConf.class)
public class DemoApplicationTests {
// ...
}
Spring Boot 解决方案 - JUnit 测试的更多相关文章
- Spring Boot集成Junit测试
添加依赖: 在测试类上添加注解:
- Spring Boot应用的测试——Mockito
Spring Boot应用的测试——Mockito Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试:Spring ...
- Spring Boot中的测试
文章目录 简介 添加maven依赖 Repository测试 Service测试 测试Controller @SpringBootTest的集成测试 Spring Boot中的测试 简介 本篇文章我们 ...
- Spring Boot 整合Junit和redis
14. Spring Boot整合-Junit 目标:在Spring Boot项目中使用Junit进行单元测试UserService的方法 分析: 添加启动器依赖spring-boot-starter ...
- spring boot项目如何测试,如何部署
有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...
- Spring框架下Junit测试
Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ...
- Spring Boot 1.4测试的改进
对Pivotal团队来说,工作上的好事情是他们拥有一个被叫做Pivotal Labs的灵活发展部门,拥有Labs团队的Lean 和 XP程序设计方法学的强大支持,例如结对编程和测试驱动开发.他们对于测 ...
- Spring Boot 1.4测试的简单理解
首先maven要引入spring-boot-starter-test这个包. 先看一段代码 @RunWith(SpringRunner.class) @SpringBootTest(webEnviro ...
- 如何使用Dubbo 2.7.0和Spring boot实现FAT测试(Feature Acceptance Test)
在一个调用链非常长的功能中,如果想修改其中的一个特性,并进行测试,而又不影响该环境的其他用户使用现有功能.特性,例如: 1. A.B.C.D之间通过Dubbo实现远程调用 2. 这些模块可能有一个或者 ...
随机推荐
- Hdu2204 Eddy's爱好 2017-06-27 16:11 43人阅读 评论(0) 收藏
Eddy's爱好 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
- Lib作为“静态库”与“动态库”中的区别
Lib作为“静态库”与“动态库”中的区别 0. 前言: 什么是静态连接库: 静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中.因此对应的链接方式称为静态链接. 为什么 ...
- poj2186tarjan算法缩点求出度
poj2186tarjan算法缩点求出度 自己打一遍第一题,入门啦,入门啦 题目还算简单,多头牛,给你仰慕关系(可传递),问你最后有没有牛被所有的牛仰慕 根据关系可以建图,利用tarjan算法缩点处理 ...
- Java Application和Java Applet的区别
Java Applet和Java Application在结构方面的主要区别表现在: (1)运行方式不同.Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通 ...
- D3_book 11.2 stack
<!-- book :interactive data visualization for the web 11.2 stack 一个堆叠图的例子 --> <!DOCTYPE htm ...
- ASP.NET Web API 框架研究 ASP.NET Web API 路由
ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...
- 1.虚拟机中安装ubuntu
1.VMware安装很简单,全部默认安装即可. 2.安装完VMware之后,打开VMware,点击创建虚拟机 典型安装易出问题,所以这里选择自定义安装 安装过程选项配置如下 处理器数,核数,内存都可以 ...
- 分形之希尔伯特-皮亚诺(Hilbert-Peano)曲线
1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线.后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线.Hilbert-Peano曲线是一种分形图形,它可以画得无 ...
- .net图表之ECharts随笔05-不同01的语法步骤
找了好久,一直没找到可用的热力图heatmap.js. 应该说,使用01中的语法一直都无法实现热力图.只能说我太菜了... 现在急于求成,我找了另一种语法来调用ECharts.此种语法的js文件集是从 ...
- UWP 使用Windows Community Toolkit 的OneDrive service上传下载文件
上一年年底写过两篇文章 UWP 使用OneDrive云存储2.x api(一)[全网首发] UWP 使用OneDrive云存储2.x api(二)[全网首发] 没想到半年之后,VS编译提示方法已经过时 ...