单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试

1. 常用注解

常用注解:

  • @Test
  • @BeforeAll,@AfterAll
  • @BeforeEach,@AfterEach

使用这些注解需要先引入依赖:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

1.1 @Test

@Test用于方法,表示该方法是一个测试方法

添加上@Test注解可以看到左边出现了绿色三角形,点击可运行对应方法,点击类名左边的则是运行类中的所有测试方法。

1.2  @BeforeAll @AfterAll

@BeforeAll注释的方法会在该类中的所有测试方法执行前执行;

@AfterAll注释的方法会在该类中所有测试方法执行后执行; 

被这两个注解注释的方法只能声明为静态方法

public class JunitTest {
    @Test
    void test01() {
        System.out.println("test01");
    }

    @Test
    void test02() {
        System.out.println("test02");
    }

    @BeforeAll
    static void beforeAll() {
        System.out.println("BeforeAll");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("AfterAll");
    }
}

1.3  @BeforeEach  @AfterEach

@BeforeEach注释的方法会在该类中的每个测试方法执行前都执行一次;

@AfterEach注释的方法会在该类中每个测试方法执行后都执行一次; 

public class JunitTest {
    @Test
    void test01() {
        System.out.println("test01");
    }

    @Test
    void test02() {
        System.out.println("test02");
    }

    @BeforeAll
    static void beforeAll() {
        System.out.println("BeforeAll");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("AfterAll");
    }

    @BeforeEach
    void beforeEach() {
        System.out.println("BeforeEach");
    }

    @AfterEach
    void afterEach() {
        System.out.println("AfterEach");
    }
}

2. 指定测试用例执行顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
    @Order(2)
    @Test
    void test01() {
        System.out.println("test01");
    }

    @Order(1)
    @Test
    void test02() {
        System.out.println("test02");
    }
}

 

3. 参数化 

我们不能直接给测试方法添加参数,需要通过注册的方式。

引入依赖:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

3.1 单参数

    //单参数
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4})
    void test03(int x) {
        System.out.println("test03, x = " + x);
    }

@ParameterizedTest 注解用于表示方法为一个参数测试方法,允许运行同一个测试方法多次,但使用不同的参数值来执行测试

@ValueSource用于为@ParameterizedTest 提供单一类型的参数值。

3.2 多参数

    //多参数
    @ParameterizedTest
    @CsvSource({"'小明', '18'", "'小红', '19'", "'小华', '20'"})
    void test04(String name, int age) {
        System.out.println(name + "今年" + age + "岁");
    }

    //多参数,文件传递
    @ParameterizedTest
    @CsvFileSource(resources = "test05.csv")
    void test05(String name, int age) {
        System.out.println(name + "今年" + age + "岁");
    }

 

3.3 通过方法生成参数

    @ParameterizedTest
    @MethodSource("generate")
    void test06(String name, int age) {
        System.out.println(name + "今年" + age + "岁");
    }
    public static Stream<Arguments> generate() {
        return Stream.of(
                Arguments.arguments("A", 12),
                Arguments.arguments("B", 13),
                Arguments.arguments("C", 14),
                Arguments.arguments("D", 15)
        );
    }

arguments()方法接受的是一个可变参数,可以接收任意数量的参数

4. 测试套件

实际开发中会有多个类需要我们测试,所以我们也需要管理多个测试类的运行。

引入依赖:

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

 

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({JunitTest.class, JunitTest2.class})
public class RunTest {
}

创建一个类使用入上注解

@SelectClasses表示通过class运行测试用例,这里先运行JunitTest再运行JunitTest2

也可以使用包运行:

@Suite
//@SelectClasses({example.JunitTest.class, example.JunitTest2.class})
@SelectPackages(value = {"example"})
public class RunTest {
}

注意RunTest类不能在这个包中

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JUnit-BOM(Bill of Materials)是JUnit团队为JUnit 5框架提供的一个特殊模块。它的目的是简化JUnit 5的依赖管理。通过添加JUnit-BOM到你的项目中,你可以使用JUnit 5的所有核心模块和扩展模块,而无需单独指定每个模块的版本。 要使用JUnit-BOM,你需要在你的项目的构建文件中添加一个依赖项。对于Maven项目,可以在`<dependencies>`标签中添加以下内容: ``` <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.x.x</version> <!-- 替换为你想要使用的JUnit 5版本 --> <type>pom</type> <scope>import</scope> </dependency> ``` 对于Gradle项目,可以在`dependencies`块中添加以下内容: ``` dependencies { testImplementation platform('org.junit:junit-bom:5.x.x') // 替换为你想要使用的JUnit 5版本 testImplementation 'org.junit.jupiter:junit-jupiter-api' // 添加其他所需的JUnit 5模块 } ``` 添加JUnit-BOM之后,你可以使用JUnit 5的各种功能,例如编写和运行JUnit单元测试。你可以使用`@Test`注解来标记测试方法,并使用JUnit提供的各种断言和注解来编写强大的单元测试。 通过引用JUnit-BOM,你可以确保你的项目使用与JUnit 5兼容的版本,并且可以轻松管理依赖关系。这使得在不同的项目中使用JUnit 5变得更加简单和一致。 JUnit-BOM的详细信息可以在JUnit官方文档中找到。 JUnit是一个用于编写和运行可重复自动化测试的Java单元测试框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ting-yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值