测试——Junit

内容大纲:

常用的五个注解

测试用例顺序指定

参数化

测试套件

断言

1. 常用的五个注解

1.1 @Test

通常情况下,我们输入要写在main方法下,此时我想直接输出:

java 复制代码
@Test
void Test01(){
    System.out.println("================第一个测试用例");
}

1.2 @BeforeAll @AfterAll

BeforeALL在Test修饰的方法之前运行,AfterAll在之后运行

java 复制代码
    @Test
    void Test01(){
        System.out.println("================第一个测试用例");
    }

    @Test
    void Test02(){
        System.out.println("================第二个测试用例");
    }

    @BeforeAll
    static void Start(){
        System.out.println("=================开始测试===============");
    }

    @AfterAll
    static void End(){
        System.out.println("=================结束测试===============");
    }

1.3 @BeforeEach @AfterEach

java 复制代码
    @Test
    void Test01(){
        System.out.println("================第一个测试用例");
    }

    @Test
    void Test02(){
        System.out.println("================第二个测试用例");
    }

    @BeforeEach
    void StartV1(){
        System.out.println("***开始执行***");}

    @AfterEach
    void EndV1(){
        System.out.println("***结束执行***");
    }

2. 测试用例顺序指定

复制代码
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
复制代码
@Order(2)
java 复制代码
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

    @Order(2)
    @Test
    void Test01(){
        System.out.println("================第一个测试用例");
    }

    @Order(1)
    @Test
    void Test02(){
        System.out.println("================第二个测试用例");
    }

3. 参数化

1.1 单参数

java 复制代码
    /**
     * 单参数
     */
    @ParameterizedTest
    @ValueSource(ints={1,2,3,4})
    void Test03(int x){
        System.out.println("接收的参数x:" + x);
    }

单参数有他的弊端,只能接收一种类型的参数,对应的Test方法只能接收一个参数

1.2 多参数

java 复制代码
    /**
     * 多参数
     */
    @ParameterizedTest
    @CsvSource({"'张三','28'"})
    void Test04(String name,int age){
        System.out.println(name + "今年" + age +"岁");
    }

读取文件中的数据进行操作:

每组数据用逗号隔开

java 复制代码
    //多参数,读取文件中的数据,进行操作
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test05(String name,int age){
        System.out.println("name: " + name + ",age: "+age);
    }

注意:

参数化对应的注解上如果写了@Test,测试用例就会执行两次,其中一次就会报错,因为Test和方法混合,没有找到参数,所以报错

1.3 通过方法生成参数

java 复制代码
    /**
     * 通过方法生成参数
     */
    @ParameterizedTest
    @MethodSource("Generate")
    void Test06(String name,int age){
        System.out.println("name: " + name + ",age: "+age);
    }


    public static Stream<Arguments> Generate() {
        return Stream.of(
                Arguments.arguments("张山",12),
                Arguments.arguments("lisi",23));
    }

4. 测试套件

@Suite

4.1 通过class运行测试用例

java 复制代码
@Suite
//通过class运行测序用例
@SelectClasses({JunitTest2.class,JunitTest.class})
public class RunTests {
}

4.2 通过包运行测试用例

java 复制代码
@Suite
//通过包运行测试用例
@SelectPackages(value = {"example"})
public class RunTests {
}

5. 断言

断言相等/不相等/为空/不为空

java 复制代码
    /**
     * 断言
     */
    @Test
    void Test07(){
        int x = 10;
        int y = 20;
        Assertions.assertEquals(x,y);//判断断言是否相等
        Assertions.assertNotEquals(x,y);//判断断言是否不相等
        String temp = null;
        Assertions.assertNull(temp);//判断断言是否为空
        Assertions.assertNotNull(temp);//判断断言是否不为空
    }

6. 依赖

java 复制代码
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>
相关推荐
轻刀快马17 小时前
跨越软硬件的共鸣(二):从 Cache 写策略看 Redis 与 DB 的一致性博弈
java·开发语言·redis·计算机组成原理
折哥的程序人生 · 物流技术专研17 小时前
Java 23 种设计模式:从踩坑到精通 | 装饰器模式 —— 比继承更灵活的扩展方式,你用过吗?
java·装饰器模式·java面试·结构型模式·java设计模式·javaio·从踩坑到精通
lili001218 小时前
2026 企业 AI 选型新范式:OpenRouter Fusion 证明多模型融合性价比远超单模型,企业该如何重构技术栈? - 微元算力(weytoken)
java·人工智能·python·重构·ai编程
shushangyun_18 小时前
汽车服务行业B2B平台+AI解决方案哪家专业:2026年最新测评
java·运维·网络·数据库·人工智能·汽车
A.说学逗唱的Coke18 小时前
【大模型专题】Spring AI Alibaba × Skill 整合实战:让 AI 真正“会干活
java·人工智能·spring
大黄说说18 小时前
深入理解 Go 协程 Goroutine:并发编程的核心精髓
java·数据库·python
许彰午18 小时前
38_Java设计模式之装饰器模式
java·设计模式·装饰器模式
折哥的程序人生 · 物流技术专研18 小时前
Java 23 种设计模式:从踩坑到精通 | 组合模式 —— 树形结构处理,部分与整体一视同仁
java·组合模式·java面试·springsecurity·结构型模式·java设计模式·从踩坑到精通
郝学胜-神的一滴19 小时前
完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
java·开发语言·数据结构·c++·python·算法
农民小飞侠19 小时前
[leetcode] 165. Compare Version Numbers
java·算法·leetcode