JUnit 单元测试常用注解
测试顺序大概流程
//第一步: 创建测试类, 测试类的类名一般是: 被测试类类名 + Test
public class MathUtilsTest {
/*
第二步: 为了保证每个方法独立, 为测试的每个方法单独创建测试方法
测试方法要求(规格):
(1) 不能有参数
(2) 不能返回值
(3) 方法名建议: test+被测试的方法(遵循驼峰命名规范)
(4) 修饰符必须是public
*/
// 第三步: 为了保证每个测试方法都能够独立运行,需要加上一个注解@Test
/*
@Test : 可以让测试方法独立运行 (核心注解)
@Before(@BeforeEach): 在每个测试方法运行之前都运行一次
@After(@AfterEach): 在每个测试方法运行之后都运行一次
@BeforeClass(@BeforeAll): 在类加载的时候走一次(该注解修饰的测试方法必须是静态方法)
@AfterClass(@AfterAll) : 在所有的测试方法走完之后走一次(同样只能修饰静态方法 就是静态代码块)
总结:
使用步骤:
(1) 导包
(2) 创建测试类:
类名要求: 要测试的类+Test
(3) 在测试类中定义测试方法
方法要求:
(1) 没有返回值, 没有参数
(2) 权限修饰符必须是public
(3) 方法名要求:test+要被测试的方法名
(4) 抗上@Test即可
优点:
(1) 每个方法测试都单独测试互不影响
(2) 自动化测试
(3) 能够生成测试报告
(4) 还可以断言Assert
*/
/*
断言:所谓断言:意思是程序员可以预测程序的运行结果,检查程序的运行结果是否与预期一致。
由junit的Asset工具类实现
eg: Assset.assrtEquals("提示消息",预期目标,实际结果);
*/
}
JUnit 是 Java 中最常用的单元测试框架,以下是一些常用的注解及其用法示例。
1. @Test
-
用途:标识一个方法为测试方法。
-
示例:
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class MathUtilsTest { @Test public void testAdd() { MathUtils mathUtils = new MathUtils(); int result = mathUtils.add(2, 3); assertEquals(5, result, "2 + 3 应该等于 5"); } }
2. @BeforeEach
-
用途:在每个测试方法执行之前运行的方法,通常用于设置测试环境。
-
示例:
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class MathUtilsTest { private MathUtils mathUtils; @BeforeEach public void setUp() { mathUtils = new MathUtils(); // 每个测试前创建新的 MathUtils 实例 } @Test public void testAdd() { assertEquals(5, mathUtils.add(2, 3)); } }
3. @AfterEach
-
用途:在每个测试方法执行之后运行的方法,通常用于清理测试环境。
-
示例:
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class MathUtilsTest { @AfterEach public void tearDown() { // 清理操作,例如关闭连接、释放资源等 } @Test public void testAdd() { // 测试逻辑 } }
4. @BeforeAll
-
用途:在所有测试方法执行之前运行的方法,适用于静态方法,通常用于一些昂贵的设置操作。
-
示例:
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class MathUtilsTest { @BeforeAll public static void init() { // 进行全局的设置操作,例如加载配置 } @Test public void testAdd() { // 测试逻辑 } }
5. @AfterAll
-
用途:在所有测试方法执行之后运行的方法,适用于静态方法,通常用于清理全局资源。
-
示例:
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class MathUtilsTest { @BeforeAll public static void init() { // 全局设置 } @AfterAll public static void cleanUp() { // 清理全局资源 } @Test public void testAdd() { // 测试逻辑 } }
6. @Disabled
-
用途:标识一个测试方法(或类)为禁用,JUnit 不会执行该测试。
-
示例:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class MathUtilsTest { @Disabled("此测试暂时禁用") @Test public void testAdd() { // 此测试不会被执行 } }
7. @ParameterizedTest
-
用途:用于参数化测试,允许用不同的参数运行同一个测试方法。
-
示例:
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class MathUtilsTest { @ParameterizedTest @CsvSource({ "1, 2, 3", "2, 3, 5", "4, 5, 9" }) public void testAdd(int a, int b, int expected) { MathUtils mathUtils = new MathUtils(); assertEquals(expected, mathUtils.add(a, b)); } }
8. @Nested
-
用途:用于组织测试,允许将测试分组在一起,便于维护和可读性。
-
示例:
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class MathUtilsTest { @Nested class AddTests { @Test public void testAddPositiveNumbers() { MathUtils mathUtils = new MathUtils(); assertEquals(5, mathUtils.add(2, 3)); } @Test public void testAddNegativeNumbers() { MathUtils mathUtils = new MathUtils(); assertEquals(-5, mathUtils.add(-2, -3)); } } }
9. @DisplayName
- 用途:用于设置测试方法名,便于针对性测试
- 示例: