Java基础--单元测试

JUnit是Java中最流行的开源单元测试框架,用于编写和运行可重复的、自动化的单元测试。JUnit极大地简化了测试用例的编写和组织,提供了丰富的断言方法、测试运行控制、测试结果报告等功能,是遵循测试驱动开发(TDD)和持续集成(CI)实践的重要工具。

步骤:

某个系统,有多个业务方法,请使用Junit框架完成对这些方法的单元测试。

具体步骤

①将Junit框架的jar包导入到项目中(注意:IDEA集成了Junit框架,不需要我们自己手工导入了)

②编写测试类、测试类方法(注意:测试方法必须是公共的,无参数,无返回值的非静态方法)

③必须在测试方法上使用@Test注解(标注该方法是一个测试方法)

④在测试方法中,编写程序调用被测试的方法即可。

⑤选中测试方法,右键选择"JUnit运行" ,如果测试通过则是绿色;如果测试失败,则是红色

junit常见注解

Junit 4**.xxxx版本**

|----------------------|----------------------------------|
| | 说明 |
| @Test | 测试方法 |
| @Before | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。 |
| @After | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。 |
| @Before****Class | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。 |
| @After****Class | 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。 |

开始执行的方法:初始化资源。

执行完之后的方法:释放资源。

Junit5.xxxx版本

|---------------------|----------------------------------|
| 注解 | 说明 |
| @Test | 测试方法 |
| @Before****Each | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。 |
| @After****Each | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。 |
| @Before****All | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。 |
| @After****All | 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。 |

基本概念

**•测试类:**每个测试类通常对应待测试的类或一组相关功能。测试类通常以Test结尾,且需继承junit.framework.TestCase或使用@RunWith(JUnit4.class)注解。

**•测试方法:**每个测试方法通常对应待测试类的一个具体功能点。测试方法名以test开头,无返回值,且不接受任何参数。测试方法内部使用JUnit提供的断言方法验证实际结果与预期结果是否相符。

**•断言(Assertions):**JUnit提供了丰富的断言方法,如assertEquals()、assertTrue()、assertNull()等,用于在测试方法中验证程序行为和结果。

**•测试运行:**JUnit通过junit.textui.TestRunner、IDE集成或构建工具(如Maven、Gradle)提供的插件运行测试。测试结果通常以通过/失败的形式显示,并提供详细的失败信息。

使用方法

  1. 添加JUnit依赖:

在Maven或Gradle项目中添加JUnit依赖。

Maven:

java 复制代码
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle:

java 复制代码
dependencies {
    testImplementation 'junit:junit:4.13.2'
}
  1. 创建测试类:

创建一个继承junit.framework.TestCase或使用@RunWith(JUnit4.class)注解的公共类,类名通常以Test结尾。

java 复制代码
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class MyCalculatorTest {
    @Test
    public void testAdd() {
        MyCalculator calculator = new MyCalculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }
}

3. 运行测试:

在IDE(如IntelliJ IDEA、Eclipse)中右键点击测试类或方法,选择"Run 'XXXTest'"。

也可通过命令行使用mvn test或gradle test运行所有测试。

高级特性

**•注解:**JUnit 4引入了大量的注解,如@Test、@Before、@After、@BeforeClass、@AfterClass、@Ignore、@Rule、@Parameterized等,用于标记测试方法、设置前置/后置操作、忽略测试、配置规则、参数化测试等。

**•断言方法:**除了基本的断言方法,JUnit还提供了更复杂的断言,如assertArrayEquals()、assertThat()(配合Hamcrest匹配器)、assertThrows()等,用于验证数组、集合、异常、对象属性等复杂情况。

**•测试套件(Test Suite):**使用junit.framework.TestSuite或@Suite注解将多个测试类组织成一个测试套件,一次性运行所有相关的测试。

**•规则(Rules):**JUnit规则(如TemporaryFolder、ExpectedException、ExternalResource等)提供了在测试前后进行资源管理、异常检查、外部资源清理等操作的通用机制。

**•参数化测试(Parameterized Tests):**使用@RunWith(Parameterized.class)和@Parameters注解,可以创建一组参数化测试用例,每个测试用例使用不同的输入数据运行相同的测试逻辑。

**•异常测试:**使用@Test(expected = SomeException.class)注解或assertThrows()方法,可以测试特定方法在特定条件下是否抛出预期的异常。

**•第三方扩展:**JUnit与许多第三方库(如Mockito、PowerMock、AssertJ、TestNG迁移工具等)兼容,可以进一步增强测试功能和易用性。

相关推荐
向阳2562 分钟前
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
java·vue.js·spring boot·后端·sa-token·springboot·登录流程
巷北夜未央7 分钟前
Python每日一题(14)
开发语言·python·算法
XiaoLeisj18 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
风象南19 分钟前
SpringBoot实现数据库读写分离的3种方案
java·spring boot·后端
振鹏Dong26 分钟前
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
java·策略模式
ChinaRainbowSea35 分钟前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
雾月5535 分钟前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
Y.O.U..1 小时前
今日八股——C++
开发语言·c++·面试
melck1 小时前
liunx日志查询常用命令总结
java·服务器·网络
守护者1701 小时前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习