Junit单元测试基础

目录

配置xml文件,注入依赖 

常用注释

1.@Test

2.@BeforeAll和@AfterAll

3.@BeforeEach和@AfterEach

4.@TestMethodOrder

参数化

1.单参数

2.多参数

3.通过方法生成参数

测试用例执行管理


JUnit 是一个流行的 Java 单元测试框架,它为开发者提供了一种简单而有效的方式来编写和执行单元测试。

JUnit 5 是最新版本,也称为 JUnit Jupiter,它引入了许多新特性,如参数化测试、条件测试、扩展模型等,以及更强大的断言方法和注解。

JUnit 可以与许多集成开发环境(IDE)和构建工具(如 Eclipse、IntelliJ IDEA、Maven、Gradle 等)无缝集成,使得测试编写、运行和调试变得更加方便和高效。

配置xml文件,注入依赖 

 <!-- JUnit Jupiter API 依赖 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Jupiter 引擎依赖 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Platform 引擎依赖 -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

注:创建的SpringBoot项目不需要引入依赖,直接使用junit注释即可。

常用注释

1.@Test

@Test是 JUnit 框架中的一个注解,用于标识一个方法是一个测试方法。JUnit 框架会在运行测试时自动识别被@Test注解标记的方法,并执行这些方法中的测试代码。@Test注解可以直接用于方法上。

2.@BeforeAll和@AfterAll

@BeforeAll和@AfterAll是 JUnit 框架中的生命周期注解,用于执行在所有测试方法执行之前和之后的操作。它们通常用于执行一次性的设置或清理操作,例如启动或关闭测试环境、连接或关闭数据库等。

public class MyTest {

    @BeforeAll
    public static void setUp() {
        // 在所有测试方法执行之前执行的代码
        System.out.println("Before all tests");
    }

    @AfterAll
    public static void tearDown() {
        // 在所有测试方法执行之后执行的代码
        System.out.println("After all tests");
    }

    @Test
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    public void testMethod2() {
        // 测试方法2
    }
}

3.@BeforeEach和@AfterEach

 @BeforeEach和@AfterEach是 JUnit 框架中的生命周期钩子注解,用于在每个测试方法执行前和执行后执行特定的操作。它们通常用于执行一些准备工作或清理工作,以确保测试方法的独立性。

public class MyTest {

    @BeforeEach
    public void setUp() {
        // 在每个测试方法执行之前执行的代码
        System.out.println("Before each test");
    }

    @AfterEach
    public void tearDown() {
        // 在每个测试方法执行之后执行的代码
        System.out.println("After each test");
    }

    @Test
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    public void testMethod2() {
        // 测试方法2
    }
}

4.@TestMethodOrder

通过@TestMethodOrder注解,可以指定测试方法的执行顺序。它可以与 OrderAnnotation.classAlphanumeric.classRandom.class 结合使用,以决定测试方法的执行顺序。这些选项分别表示按照注解顺序、按照字母数字顺序或者随机顺序执行测试方法。

//这行不能省略
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderedTests {

    @Test
    @Order(1)
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    @Order(2)
    public void testMethod2() {
        // 测试方法2
    }

    @Test
    @Order(3)
    public void testMethod3() {
        // 测试方法3
    }
}

参数化

注意:参数化注释上方不用写@Test注释

1.单参数

单参数只能接收一种类型的参数

@ParameterizedTest用于指定参数化测试方法。参数化测试是一种测试技术,允许通过使用不同的参数多次运行同一个测试方法,以覆盖不同的测试场景。

@ParameterizedTest注解通常与@ValueSource注解一起使用实现单参数

使用@ValueSource注解提供了整数类型的参数{1,2,3}。测试方法会分别以这些参数执行多次。

public class ParameterizedTests {

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    public void testMethod(int value) {
        // 使用传入的参数执行测试方法
        // 可以在这里编写针对不同参数进行的测试逻辑
    }
}

2.多参数

@ParameterizedTest注解通常与@CsvSource注解一起使用实现多参数。允许使用 CSV(逗号分隔值)格式提供测试方法的参数。每行 CSV 数据都会被解析为测试方法的一个参数集。

public class CsvSourceExample {

    @ParameterizedTest
    @CsvSource({
        "apple, 1",
        "banana, 2",
        "orange, 3"
    })
    public void testFruits(String fruit, int quantity) {
        // 测试逻辑
        System.out.println("Fruit: " + fruit + ", Quantity: " + quantity);
    }
}

使用 @CsvFileSource 注解读取 CSV 文件并将数据传递给参数化测试方法

    @ParameterizedTest
    @CsvFileSource(resources="test01.csv")
    void Test01(String name,int age){
        System.out.println("name: "+name+",age "+age);
    }
}

3.通过方法生成参数

@ParameterizedTest注解通常与@MethodSource注解一起使用实现通过方法生成参数

  public static Stream<Arguments> Generate() {
        return Stream.of(Arguments.arguments("张三", 13), Arguments.arguments("lisi", 14));
    }
    @ParameterizedTest
    @MethodSource("Generate")
    void Test02(String name,int age){
        System.out.println(name+" "+age);
    }

测试用例执行管理

@Suite
//通过class运行测试用例
@SelectClasses({TestClass1.class, TestClass2.class})
public class MyTestSuite {
    // 包含要执行的测试类

}

@Suite
//通过包运行测试用例
@SelectPackages("com.example.tests")
public class MyTestSuite {
    // 包含要执行的测试包中的所有测试类
}

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roylelele

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值