Junit单元测试—Maven

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

  • 用途:用于设置测试方法名,便于针对性测试
  • 示例

断言判断:Assertions.assertEquals("预期值","实际值",提示信息)

posted @ 2024-10-17 18:24  PromiseForYou  阅读(9)  评论(0编辑  收藏  举报