敞开生长之旅!这是我参与「日新方案 12 月更文应战」的第20天,点击查看活动概况
前语
在前面的文章中,壹哥 给咱们讲解了各种代码作用的完成,但咱们程序员平常除了需要编写代码之外,还要进行测验、编写需求文档等作业。所以今日壹哥再给咱们简略介绍一下关于测验的一些内容,以及如何在SpringBoot中整合测验,希望咱们能够喜爱哦。
一. 测验简介
对咱们程序员来说,咱们毕竟不是专业的测验人员,所以这儿壹哥只是简略给咱们介绍咱们平常常常接触到的一些测验内容,特别专业的测验这儿就不再介绍了。
1. 单元测验的概念
在计算机编程中,单元测验是一种软件测验办法,用来测验源代码的单个单元、一个或多个计算机程序模块的调集以及相关的控制数据、运用过程和操作过程,以承认它们是否合适运用。
通俗的说,咱们在做单元测验时,只是测验了一个代码单元,也就是每次只测验一个办法,不包括与测验组件相交互的其他一切代码组件。
2. 集成测验的概念
集成测验(有时也称集成和测验,缩写为 I&T)是软件测验的一个阶段,在这个阶段中,各个软件模块被组合在一同来进行测验。通俗的说,咱们在集成测验中是把各组件进行集成在一同测验。
二. Java中的测验
1. 概述
在一般的Java开发中,咱们首要是运用JUnit进行测验功能的完成。而在Spring Boot中,则供给了许多有用的东西类和注解,用于协助咱们测验自己的应用,首要分两个模块:
- spring-boot-test:包含核心组件;
- spring-boot-test-autoconfigure:为测验供给自动装备。
可是咱们在运用SpringBoot进行开发的时分,一般只需要引证spring-boot-starter-test-starter依赖包就能够了,它涵盖了以上两大模块,既为咱们供给了Spring Boot测验模块的依赖,也供给了JUnit,AssertJ,Hamcrest等许多有用的依赖。
2. SpringBoot供给的测验库
- JUnit – 事实上的(de-facto)标准,用于Java应用的单元测验;
- Spring Test & Spring Boot Test – 对Spring应用的集成测验支撑;
- AssertJ – 一个流式断语库;
- Hamcrest – 一个匹配目标的库(也称为约束或前置条件);
- Mockito – 一个Java模仿结构;
- JSONassert – 一个针对JSON的断语库;
- JsonPath – 用于JSON的XPath。
三. JUnit回顾
1. JUnit简介
JUnit 是一个回归测验结构,常常被Java开发者用于施行对应用程序的单元测验,加速程序编制速度,同时进步编码的质量。
而回归测验是指修改了旧代码后,从头进行测验以承认本次修改没有引进新的过错或导致其他代码发生过错,也就是要重复曾经的全部或部分相同测验。
2. JUnit特性
- 测验东西
- 测验套件
- 测验运转器
- 测验分类
3. JUnit测验运用
3.1 添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>4.12</version>
</dependency>
3.2 创立测验类和测验办法
- 测验类的命名规矩一般是 xxxTest.java;
- 测验类中的测验办法一般都有前缀,比如在测验办法上带有test前缀;
- 在测验办法上添加@Test注解。
4. JUnit中常用注解
- @BeforeClass:针对一切测验,只履行一次,且修饰符必须为static void。
- @Before:初始化办法,在履行当时测验类的每个测验办法前履行。
- @Test:测验办法,在这儿能够测验期望的反常和超时时刻。
- @After:开释资源,在履行当时测验类的每个测验办法后履行。
- @AfterClass:针对一切测验,只履行一次,且必须为static void。
- @Ignore:忽略的测验办法(只在测验类的时分收效,独自履行该测验办法无效)。
- @RunWith: 更改测验运转器,缺省值org.junit.runner.Runner
5. 单元测验类履行次序
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
6. 测验办法的调用次序
@Before –> @Test –> @After
7. JUnit中的反常测验
咱们能够运用@Test注解和expected 参数,来测验咱们的代码中是否会抛出某个或许的反常。
@Test(expected = NullPointerException.class)
public void testNullException() {
throw new NullPointerException();
}
8. JUnit中的超时测验
咱们能够运用@Test注解和timeout参数,来测验咱们的代码是否比指定的毫秒数花费了更多的时刻。
@Test(timeout = 1000)
public void testTimeout() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
System.out.println("Success");
}
9. JUnit中的套件测验
咱们能够运用@Suite.SuiteClasses注解,将多个测验类整合在一同,形成一个测验套件进行测验。
public class TaskOneTest {
@Test
public void test() {
System.out.println("使命一...");
}
}
public class TaskTwoTest {
@Test
public void test() {
System.out.println("使命二...");
}
}
public class TaskThreeTest {
@Test
public void test() {
System.out.println("使命三...");
}
}
// 1. 更改测验运转方式为 Suite
@RunWith(Suite.class)
// 2. 将测验类传入进来
@Suite.SuiteClasses({TaskOneTest.class, TaskTwoTest.class, TaskThreeTest.class})
public class SuitTest {
/**
* 测验套件的进口类只是组织测验类一同进行测验,无任何特别的测验办法。
*/
}
10. JUnit中的参数化测验
从Junit 4开始,引进了一个新的参数化测验功能。参数化测验答应开发人员运用不同的值反复运转同一个测验办法。
咱们能够遵循以下 5个过程来创立参数化测验办法。
- 用 @RunWith(Parameterized.class)来注解 test 类;
- 创立一个由 @Parameters 注解的公共静态办法,返回 一个目标的调集(数组) 来作为测验参数的数据调集;
- 创立一个公共的结构函数,接收和测验数据持平的内容;
- 为每一个测验数据创立一个实例变量;
- 用实例变量作为测验数据的来源来创立你的测验用例。
//1.更改默许的测验运转器为RunWith(Parameterized.class)
@RunWith(Parameterized.class)
public class ParameterTest {
// 2.声明寄存预期值和测验数据的变量
private String firstName;
private String lastName;
//3.声明一个返回值为Collection的公共静态办法,并运用@Parameters注解进行修饰
@Parameterized.Parameters
public static List<Object[]> param() {
//这儿给出了两个测验用例
return Arrays.asList(new Object[][]{{"Mike", "Black"}, {"Cilcln", "Smith"}});
}
//4.为测验类声明一个带有参数的公共结构函数,并在其中为之声明变量赋值
public ParameterTest(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// 5. 进行测验,发现它会将一切的测验用例测验一遍
@Test
public void test() {
String name = firstName + " " + lastName;
assertThat("Mike Black", is(name));
}
}
11. JUnit中运用assertThat断语
JUnit 4.4 结合 Hamcrest 供给了一个全新的断语语法——assertThat。
#语法
assertThat( [actual], [matcher expected] );
assertThat 运用了 Hamcrest 的 Matcher 匹配符,用户能够运用匹配符规定的匹配规矩,来精确的指定一些想要设定满足的条件,具有很强的易读性,并且运用起来愈加灵敏。
结语
在今日的这篇文章中,壹哥首要是给咱们介绍了测验的一些基本知识。鄙人一篇文章中,壹哥会在SpringBoot中整合测验,编写一些测验脚本,完成单元测验。