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 {@Testpublic 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;@BeforeEachpublic void setUp() {mathUtils = new MathUtils(); // 每个测试前创建新的 MathUtils 实例}@Testpublic 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 {@AfterEachpublic void tearDown() {// 清理操作,例如关闭连接、释放资源等}@Testpublic void testAdd() {// 测试逻辑} }
4. @BeforeAll
-
用途:在所有测试方法执行之前运行的方法,适用于静态方法,通常用于一些昂贵的设置操作。
-
示例:
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test;public class MathUtilsTest {@BeforeAllpublic static void init() {// 进行全局的设置操作,例如加载配置}@Testpublic 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 {@BeforeAllpublic static void init() {// 全局设置}@AfterAllpublic static void cleanUp() {// 清理全局资源}@Testpublic void testAdd() {// 测试逻辑} }
6. @Disabled
-
用途:标识一个测试方法(或类)为禁用,JUnit 不会执行该测试。
-
示例:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test;public class MathUtilsTest {@Disabled("此测试暂时禁用")@Testpublic 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 {@Nestedclass AddTests {@Testpublic void testAddPositiveNumbers() {MathUtils mathUtils = new MathUtils();assertEquals(5, mathUtils.add(2, 3));}@Testpublic void testAddNegativeNumbers() {MathUtils mathUtils = new MathUtils();assertEquals(-5, mathUtils.add(-2, -3));}} }
9. @DisplayName
- 用途:用于设置测试方法名,便于针对性测试
- 示例: