赞
踩
1、基于SpringBoot2.7版本,引入单元测试组件
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
组件查看:
详细组件介绍
Junit4和Junit5的区别
Junit 5 = Junit Platform + Junit Jupiter + Junit Vintage
Junit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
Junit Jupiter: Junit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
Junit Vintage: 由于JUnit已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。
Junit4的依赖
Junit5
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter-engine</artifactId>
- <version>5.9.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter</artifactId>
- <version>5.9.2</version>
- <scope>test</scope>
- </dependency>
SpringBoot框架引入
1、注解对比
junit4 | junit5 | 特点 |
---|---|---|
@Test | @Test | 声明一个测试方法 |
@BeforeClass | @BeforeAll | 在当前类的所有测试方法之前执行。注解在【静态方法】上 |
@AfterClass | @AfterAll | 在当前类中的所有测试方法之后执行。注解在【静态方法】上 |
@Before | @BeforeEach | 在每个测试方法之前执行。注解在【非静态方法】上 |
@After | @AfterEach | 在每个测试方法之后执行。注解在【非静态方法】 |
Junit4的注解列表
Junit5注解列表
- @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
- @ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
- @RepeatedTest :表示方法可重复执行,下方会有详细介绍
- @DisplayName :为测试类或者测试方法设置展示名称
- @BeforeEach :表示在每个单元测试之前执行
- @AfterEach :表示在每个单元测试之后执行
- @BeforeAll :表示在所有单元测试之前执行
- @AfterAll :表示在所有单元测试之后执行
- @Tag :表示单元测试类别,类似于JUnit4中的@Categories
- @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
- @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
- @ExtendWith :为测试类或测试方法提供扩展类引用
2、导入包区别
junit5
import org.junit.jupiter.api.Test;
junit4
import org.junit.Test;
3、常用断言
断言测试也就是期望值测试,是单元测试的核心也就是决定测试结果的表达式,Assert对象中的断言方法:
4、SpringBoot使用基本的Junit单元测试
使用Junit4的一个样例
- package com.boot.skywalk;
-
- import lombok.extern.slf4j.Slf4j;
- import org.junit.AfterClass;
- import org.junit.Assert;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
-
- @Slf4j
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class CommonUnitJunit4Test {
- @BeforeClass
- public static void beforeClass(){
- log.info("start execute unit testing");
- }
-
- @AfterClass
- public static void afterClass(){
- log.info("end execute unit testing");
- }
-
- @Test
- public void doAssertEqualsTest() {
- int num = new Integer(1);
- Assert.assertEquals(num, 1);
- }
-
- @Test
- public void doAssertNotEqualsTest(){
- int num = new Integer(1);
- Assert.assertEquals(num, 2);
- }
-
- @Test
- public void doTest() {
- String[] string1 = {"1", "2"};
- String[] string2 = string1;
- String[] string3 = {"1", "2"};
- Assert.assertArrayEquals(string1, string2);
- Assert.assertArrayEquals(string2, string3);
- Assert.assertSame(string1, string2);
- Assert.assertSame(string2, string3);
- }
- }
使用Junit5的样例
- package com.boot.skywalk;
-
- import lombok.extern.slf4j.Slf4j;
- import org.junit.jupiter.api.AfterEach;
- import org.junit.jupiter.api.Assertions;
- import org.junit.jupiter.api.BeforeEach;
- import org.junit.jupiter.api.Test;
- import org.junit.jupiter.api.extension.ExtendWith;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit.jupiter.SpringExtension;
-
- @Slf4j
- @ExtendWith(SpringExtension.class)
- @SpringBootTest
- public class CommonUnitJunit5Test {
- @BeforeEach
- public static void beforeClass(){
- log.info("start execute unit testing");
- }
-
- @AfterEach
- public static void afterClass(){
- log.info("end execute unit testing");
- }
-
- @Test
- public void doAssertEqualsTest() {
- int num = new Integer(1);
- Assertions.assertEquals(num, 1);
- }
-
- @Test
- public void doAssertNotEqualsTest(){
- int num = new Integer(1);
- Assertions.assertEquals(num, 2);
- }
-
- @Test
- public void doTest() {
- String[] string1 = {"1", "2"};
- String[] string2 = string1;
- String[] string3 = {"1", "2"};
- Assertions.assertArrayEquals(string1, string2);
- Assertions.assertArrayEquals(string2, string3);
- Assertions.assertSame(string1, string2);
- Assertions.assertSame(string2, string3);
- }
- }
在单元测试中,模拟对象可以模拟复杂的、真实的对象的行为, 如果真实的对象无法放入单元测试中,使用模拟对象就很有帮助。
在下面的情形,可能需要使用模拟对象来代替真实对象:
1、使用依赖
SpringBoot的单元测试组件引入
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
包含组件如下:
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>4.5.1</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-junit-jupiter</artifactId>
- <version>4.5.1</version>
- <scope>compile</scope>
- </dependency>
2、具体使用
Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 )
thenThrow 系列方法
mockito在spring boot中的使用_springboot使用mockito_hymei0的博客-CSDN博客
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。