junit.Test 的使用方法

在 Maven 项目中使用 JUnit,你需要在项目的 pom.xml 文件中添加 JUnit 依赖。然后,你可以创建测试类,并在测试类中使用 @Test 注解标识测试方法。

文章目录

  • 基本使用
  • 其他注解
    • @Before 和 @After
    • @BeforeClass 和 @AfterClass
    • @Ignore
    • @RunWith
    • 参数化测试

基本使用

以下是一般步骤:

  1. pom.xml 文件中添加 JUnit 依赖:
<dependencies><!-- 其他依赖... --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> <!-- 版本号可能会有更新 --><scope>test</scope></dependency>
</dependencies>

确保将 JUnit 依赖的作用范围(<scope>)设置为 test,这样 JUnit 将只在测试阶段可用,而不会影响应用程序的运行时依赖。

  1. 创建测试类:

创建一个测试类,例如 MyTestClass,其中包含测试方法并使用 @Test 注解标识:

import org.junit.Test;
import static org.junit.Assert.*;public class MyTestClass {@Testpublic void testAddition() {int result = 2 + 2;assertEquals(4, result); // 断言,验证结果是否符合预期}@Testpublic void testSubtraction() {int result = 5 - 3;assertTrue(result > 0); // 断言,验证结果是否为真}
}
  1. 运行测试:

你可以使用 Maven 命令来运行测试。在项目的根目录下执行以下命令:

mvn test

或者直接在IDEA中点击左侧的绿色三角

这将会编译项目并运行所有的测试类。测试结果将会显示在控制台上。

注意:如果你使用的是 JUnit 5,依赖的坐标和测试类的注解会有所不同。

在这种情况下,你需要使用 junit-jupiter-apijunit-jupiter-engine 依赖,以及使用 @Test 注解来标识测试方法。在 pom.xml 中可能看起来类似于以下内容:

<dependencies><!-- 其他依赖... --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.0</version> <!-- 版本号可能会有更新 --><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.8.0</version> <!-- 版本号可能会有更新 --><scope>test</scope></dependency>
</dependencies>

其他注解

JUnit 提供了多个注解,用于标识测试类和测试方法的不同方面。以下是一些常用的 JUnit 注解:

@Before 和 @After

  • @Before 注解标识的方法在每个测试方法之前执行,用于进行一些初始化操作。
  • @After 注解标识的方法在每个测试方法之后执行,用于进行一些清理操作。
```java
import org.junit.Before;
import org.junit.After;public class MyTestClass {@Beforepublic void setUp() {// 执行初始化操作}@Afterpublic void tearDown() {// 执行清理操作}// 测试方法...
}
```

@BeforeClass 和 @AfterClass

  • @BeforeClass 注解标识的方法在所有测试方法执行前执行,通常用于执行一次性的设置。
  • @AfterClass 注解标识的方法在所有测试方法执行完毕后执行,通常用于执行一次性的清理操作。
```java
import org.junit.BeforeClass;
import org.junit.AfterClass;public class MyTestClass {@BeforeClasspublic static void setUpClass() {// 执行一次性的设置}@AfterClasspublic static void tearDownClass() {// 执行一次性的清理操作}// 测试方法...
}
```

@Ignore

  • @Ignore 注解用于标识不想执行的测试方法。可以用于临时禁用某些测试,通常在开发过程中用得较多。
```java
import org.junit.Ignore;public class MyTestClass {@Testpublic void testMethod1() {// 测试代码...}@Ignore@Testpublic void testMethod2() {// 这个测试将会被忽略}
}
```

@RunWith

  • @RunWith 注解用于指定测试运行器(Runner)。JUnit 默认使用 BlockJUnit4ClassRunner,但你可以使用其他的运行器,例如 Parameterized,以实现不同的测试行为。
```java
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;@RunWith(Parameterized.class)
public class MyParameterizedTest {// 参数化测试代码...
}
```

这只是 JUnit 提供的一小部分注解,还有其他用于参数化测试、超时控制等的注解。不同版本的 JUnit 可能会引入新的注解或者修改现有注解的行为,因此查阅相应版本的文档是很重要的。

参数化测试

参数化测试是一种测试方法,它允许你使用不同的输入值多次运行相同的测试方法。
这对于测试同一片代码的不同输入或边缘情况非常有用。在 JUnit 4 中,参数化测试通常通过使用 @RunWith 注解和 @Parameters 注解来实现。

下面是一个简单的例子,演示了如何使用参数化测试:

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;import java.util.Arrays;
import java.util.Collection;@RunWith(Parameterized.class)
public class MyParameterizedTest {private int input;private int expected;// 构造函数用于接收参数public MyParameterizedTest(int input, int expected) {this.input = input;this.expected = expected;}// 提供测试参数@Parameterspublic static Collection<Object[]> data() {return Arrays.asList(new Object[][] {{1, 2},{2, 4},{3, 6},{4, 8}});}// 实际测试方法@Testpublic void testMultiply() {MyClass myClass = new MyClass();assertEquals(expected, myClass.multiplyByTwo(input));}
}

在上面的例子中,MyParameterizedTest 类使用 @RunWith(Parameterized.class) 注解来告诉 JUnit 使用参数化运行器运行测试。然后,通过 @Parameters 注解提供了一组测试参数,其中每个参数是一个输入值和预期输出值的组合。测试方法 testMultiply() 会使用这些参数执行多次,确保代码在不同输入下的正确性。

需要注意的是,以上是基于 JUnit 4 的示例,JUnit 5 中引入了新的注解 @ParameterizedTest,并提供了更灵活的方式来执行参数化测试。在 JUnit 5 中,你可以使用 @CsvSource@ValueSource 等注解来定义参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#判断骨龄与生活年龄的比较

什么是骨龄 骨龄是骨骼年龄的简称&#xff0c;它能体现人体生长发育程度。随着生长发育&#xff0c;不同年龄段的骨骺发育成熟度不一样而出现不同的影像特征&#xff0c;是骨龄检测的理论基础。手指腕掌具有20多块骨骼&#xff0c;在各个年龄段具有不同的特点&#xff0c;因而…

009:vue结合el-table实现表格行拖拽排序(基于sortablejs)

文章目录 1. 实现效果2. 安装 sortablejs 插件3. 完整组件代码4. 注意点 1. 实现效果 2. 安装 sortablejs 插件 sortablejs 更多用法 cnpm i --save sortablejs3. 完整组件代码 <template><div class"home"><div class"body"><el-ta…

MongoDB 面试题

MongoDB 面试题 1. 什么是MongoDB&#xff1f; MongoDB是一种非关系型数据库&#xff0c;被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#xff0c;支持动态查询和索引&#xff0c;也支持BSON格式的数据存储&#xff0c;这…

catboost回归自动调参

import os import time import optuna import pandas as pd from catboost import CatBoostRegressor from sklearn.metrics import r2_score, mean_squared_error from sklearn.model_selection import train_test_split X_train data.drop([‘label’, ‘b1’, ‘b2’], a…

探究公有云中的巨人:深入分析大数据产品的架构设计

目录 一、服务器分类 二、公有云基础和产品 网络 vpc专有网络 弹性公网IP(Elastic IP)

3种事件绑定的异同(js的问题)

html事件 dom0事件 dom2事件 • 广义javascript ECMAScript DOM BOM DOM0 DOM1 DOM2 • 狭义javascript ECMAScript ES6 ES5 ES3 事件监听的优点&#xff1a;可以绑定多个事件&#xff0c;常规的事件绑定只执行最后绑定的事件 事件绑定&#xff1a;相当于存储…

从外网访问内网服务器:安装到使用一站通

如果你所在的是一个小的实验室&#xff0c;可能并没有大型的服务器集群而是仅是配备了小型服务器&#xff0c;日常工作便是在在局域网内访问服务器进行各项数据处理。因为在外网无法访问内网服务器&#xff0c;极大的限制了我们偶尔在外想监测一下数据的欲望。本文介绍了一种简…

策略模式(及案例)

策略模式 1.策略接口 定义一组算法或操作的通用接口&#xff0c;通常是一个抽象类或接口。该接口声明了策略类所必须实现的方法。 示例&#xff1a; class Strategy {doOperation() {} }2.具体策略 实现策略接口&#xff0c;提供具体的算法实现。每个具体策略类负责处理一…

二、C#基础语法( 函数与方法)

在C#语言中&#xff0c;函数和方法都是用于实现特定功能的代码块。虽然它们有一些相似之处&#xff0c;但它们在使用和定义上有一些细微的差别。 函数&#xff08;Functions&#xff09; 函数在C#中是独立的功能单元&#xff0c;执行特定操作并返回一个值。函数的定义以关键字…

postman win7 低版本 postman7.0.9win64 postman7.0.9win32

百度网盘&#xff1a; postman7.0.9win64&#xff1a; 链接: https://pan.baidu.com/s/18ck9tI0r9Pqoz36MOwwnnQ 提取码: rkf7 postman7.0.9win32&#xff1a; 链接: https://pan.baidu.com/s/1HrpGPrgvVzyAcjdHuwVOpA 提取码: ke5k win7系统安装postman&#xff0c;可能会…

postman使用-04响应

文章目录 响应响应界面说明Pretty&#xff1a;格式化显示&#xff0c;以便查看Raw&#xff1a;不进行任何处理&#xff0c;显示响应数据的原始格式Preview&#xff1a;预览响应体&#xff0c;会自动换行&#xff0c;不会格式化&#xff08;有时候是数据&#xff0c;有时候是页面…

leetcode151. 反转字符串中的单词

题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导…

测试-FastJSON和Jackson-JSON库

文章目录 FastJSONJackson注意 FastJSON 直接读代码&#xff1a; Log4j2 public class FastJsonTest {Testpublic void test1() {// JSON转对象-parseObjectString jsonString "{\"name\":\"张三\",\"age\":18}";Student student …

实战 | 使用OpenCV快速去除文档中的表格线条(步骤 + 源码)

导 读 本文主要介绍如何使用OpenCV快速去除文档中的表格线条,并给详细步骤和代码。 背景介绍 测试图如下,目标是去除下面三张图中的表格线条,方便后续图像处理。 实现步骤 下面演示详细步骤,以图1为例: 【1】获取二值图像:加载图像、转为灰度图、OTSU二值化 i…

日本it培训班,日本IT大体分几类?

日本是一个老龄化极其严重的国家&#xff0c;拜泡沫经济破灭后的经济停滞所赐&#xff0c;民众取得了节育方面的丰硕成果&#xff0c;然而当经济终于走出阴霾&#xff0c;呈现复苏迹象时&#xff0c;短缺的劳动力又成了一大问题&#xff0c;拖累整个经济的步伐。为了应对劳工市…

仪表盘、数据分析新增分享功能及应用服务下新增服务实例菜单

近期&#xff0c;博睿数据根据一体化智能可观测平台 Bonree ONE 产品本身&#xff0c;以及用户反馈进行持续的更新和优化。以下为 Bonree ONE 产品功能更新报告第03期内容&#xff0c;更多探索&#xff0c;未完待续。 本次迭代的更新集中在平台的仪表盘、数据分析新增分享功能&…

C++面向对象(OOP)编程-C++11新特性详解

C11作为一个重要的版本&#xff0c;引入了很多新的特性&#xff0c;解决了C语言本身很多遗留的内存泄露问题&#xff0c;并且提供了很多比较灵活的用法。引入的auto&#xff0c;智能指针、线程机制都使得C语言的灵活性、安全性、并发性有了很大的提升。 本文会比较详细的介绍C1…

Kubernetes 学习总结(41)—— 云原生容器网络详解

背景 随着网络技术的发展&#xff0c;网络的虚拟化程度越来越高&#xff0c;特别是云原生网络&#xff0c;叠加了物理网络、虚机网络和容器网络&#xff0c;数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器…

IntelliJ IDE 插件开发 | (四)开发一个时间管理大师插件

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;开发一…

未来编程语言什么样?编译解释兼方为王

○、编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; …