Junit5单元测试框架详解

这篇具有很好参考价值的文章主要介绍了Junit5单元测试框架详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面我们学习了Selenium自动化测试框架,但是有的时候测试用例会很多,我们需要一个工具来管理这些测试用例,而Junit就是一个很好的管理工具,简单点来说,Junit就是一个针对Java的单元测试框架;

目录

一. 关于Junit5

二. Junit使用

2.1 添加Maven依赖

2.2 注解

2.3 断言

2.4 套件


一. 关于Junit5

Java 语言的单元测试框架相对统一,JUnit 和TestNG 几乎始终处于市场前两位。其中 JUnit 以较长的发展历史和源源不断的功能演进,得到了大多数用户的青睐;

Junit5 由 JUnit Platform + JUnit Jupiter + JUnit Vintage3 部分构成,借用 IBM Developer 的一张图来说明 JUnit 5 的架构 :

Junit5单元测试框架详解

JUnit Platform :

其主要作用是在 JVM 上启动测试框架。它定义了一个抽象的 TestEngine API 来定义运行在平台上的测试框架;也就是说其他的自动化测试引擎或开发人员自己定制的引擎都可以接入 Junit 实现对接和执行。同时还支持通过命令行、Gradle 和 Maven 来运行;

JUnit Jupiter :

这是 Junit5 的核心,可以看作是承载 Junit4 原有功能的演进,包含了 JUnit 5 最新的编程模型和扩展机制;很多丰富的新特性使 JUnit ⾃动化测试更加方便、功能更加丰富和强大。也是测试需要重点学习的地方;Jupiter 本身也是⼀一个基于 Junit Platform 的引擎实现,对 JUnit 5 而言,JUnit Jupiter API 只是另一个 API;

JUnit Vintage :

Junit 发展了10数年,Junit 3 和 Junit 4 都积累了大量的⽤用户,作为新一代框 架,这个模块是对 JUnit3,JUnit4 版本兼容的测试引擎,使旧版本 junit 的⾃动化测试脚本也可以顺畅运行在 Junit5 下,它也可以看作是基于 Junit Platform 实现的引擎范例;

JUnit 5 对 Java 运行环境的最低要求是 Java 8;


二. Junit使用

2.1 添加Maven依赖

我们在操作 Junit 的时候要添加相应的依赖,可以去Maven仓库自行下载,这里给出一段代码:

<!-- 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>

2.2 注解

1)Test

表示方法是测试方法,与Junit4的@Test不同,不能声明任何属性,因为JUnit Jupiter中的测试扩展需要通过专用的注解;

public class Junit_Test {
    @Test
    void Test01(){
        System.out.println("测试用例1");
    }

    @Test
    void Test02(){
        System.out.println("测试用例2");
    }
}

Junit5单元测试框架详解

 

2)Disable

用于禁用一个测试类或测试方法;类似于JUnit 4的' @Ignore '。即执行单元测试时,会忽略对应的测试类或者测试方法;

public class Junit_Test {
    @Test
    void Test01(){
        System.out.println("测试用例1");
    }

    @Test
    void Test02(){
        System.out.println("测试用例2");
    }

    @Disabled
    void Test03(){
        System.out.println("测试用例3");
    }
}

Junit5单元测试框架详解

3) BeforeAll 和 AfterAll

BeforeAll:表示方法在所有测试方法之前运行;

AfterAll:表示方法在所有测试方法之后运行;

public class Junit_Test {
    @AfterAll
    // 需要添加一个关键字static,是针对这个类的
    static void Test05(){
        System.out.println("测试用例AfterAll");
    }
    @Test
    void Test01(){
        System.out.println("测试用例1");
    }

    @Test
    void Test02(){
        System.out.println("测试用例2");
    }

    @Disabled
    void Test03(){
        System.out.println("测试用例3");
    }
    @BeforeAll
    // 需要添加一个关键字static,是针对这个类的
    static void Test04(){
        System.out.println("测试用例BeforeAll");
    }

Junit5单元测试框架详解

 针对这个操作,通常情况下,创建驱动,打开网页,都放到BeforeAll里面,关闭浏览器放到AfterAll里;

4)BeforeEach 和 AfterEach

BeforeEach:表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前执行;类似于Junit4的@Before 。即在每个单元测试之前执行,如果测试类有n个测试方法,则被执行n次;

AfterEach:

表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之后执行;类似于Junit4的@After 。即在每个单元测试之后执行,如果测试类有n个测试方法,则被执行n次;

public class Junit_Test {
    @AfterAll
    // 需要添加一个关键字static,是针对这个类的
    static void Test05(){
        System.out.println("测试用例AfterAll");
    }
    @Test
    void Test01(){
        System.out.println("测试用例1");
    }

    @Test
    void Test02(){
        System.out.println("测试用例2");
    }

    @Disabled
    void Test03(){
        System.out.println("测试用例3");
    }
    @BeforeAll
    // 需要添加一个关键字static,是针对这个类的
    static void Test04(){
        System.out.println("测试用例BeforeAll");
    }

    @BeforeEach
    void Test06(){
        System.out.println("测试用例BeforeEach");
    }
    @AfterEach
    void Test07(){
        System.out.println("测试用例AfterEach");
    }
}

Junit5单元测试框架详解

5)ParameterizedTest

表示方法是参数化测试,这里我们需要引入对应的依赖,这里和Junit的版本保持一致:

<!-- 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>
    <scope>test</scope>
</dependency>
@ParameterizedTest
    // 传入整形参数
    @ValueSource(ints = {1,2,3})
    void Test08(int num){
        System.out.println(num);
    }

    @ParameterizedTest
    // 传入字符串
    @ValueSource(strings ={"1","2","3"})
    void Test09(String nums){
        System.out.println(nums);
    }

Junit5单元测试框架详解

 

CSV获取参数:

 @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test10(String name){
        System.out.println(name);
    }

Junit5单元测试框架详解

 

方法获取参数,可传入不同类型的参数:

    // 通过方法名获取参数
    @ParameterizedTest
    @MethodSource("method")
    void Test11(int num, String name) {
        System.out.println(num + ":" + name);
    }
    // 输出不同类型的参数
    public static Stream<Arguments> method() {
        return Stream.of(Arguments.arguments(1, "张三"),
                Arguments.arguments(2, "李四"),
                Arguments.arguments(3, "王五"));
    }

Junit5单元测试框架详解

6)TestMethodOrder

按照指定顺序来执行测试用例

// 按照指定顺序
//@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
// 按照随机顺序
@TestMethodOrder(MethodOrderer.Random.class)
public class Junit_Test1 {
    
    // 第三个执行
    @Order(3)
    @Test
    void Test01() {
        System.out.println("测试用例1");
    }
    // 第一个执行
    @Order(1)
    @Test
    void Test02() {
        System.out.println("测试用例2");
    }
    // 第二个执行
    @Order(2)
    @Test
    void Test03() {
        System.out.println("测试用例3");
    }
}

Junit5单元测试框架详解


2.3 断言

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;

1)assertEquals :判断两个对象或两个原始类型是否相等

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test04(int num){
        // 第一个参数是预期的,第二个参数是实际的
        Assertions.assertEquals(1,num);
        System.out.println(num);
    }

2)assertNotEquals:判断两个对象或两个原始类型是否不相等

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test04(int num){
        // 第一个参数是预期的,第二个参数是实际的
        // 判断是否相等
        //Assertions.assertEquals(1,num);
        // 判断不相等
        Assertions.assertNotEquals(2,num);
        System.out.println(num);
    }

3)assertSame:判断两个对象引用是否指向同一个对象

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test04(int num) {
        // 判断是否指向同一个对象
        Object obj1 = new Object();
        Object obj2 = new Object();
        Assertions.assertSame(obj1, obj2, "不是同一个对象");
    }

4)assertNotNull:判断给定的对象引用是否不为null

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test04(int num){
        // 判断是否为空
        String str = null;
        Assertions.assertNull(str);
    }

2.4 套件

使用 JUnit5 测试套件,您可以运行分散到多个测试类和不同包中的测试;

1)SelectClasses指定通过class运行测试套件时要选择的类

@Suite
// 先执行Junit_Test.class,再执行Junit_Test1.class
@SelectClasses({Junit_Test.class,Junit_Test1.class})
public class RunSuite {

}

1)SelectPackages指定通过包运行测试套件时要选择的类

@Suite
@SelectPackages(value = {"Pack1","Pack2"})
public class RunSuite {
}

到这里关于Junit常用的操作就介绍完了,有问题的小伙伴可以私信我,感觉有帮助的,希望可以留下你们的小赞~~文章来源地址https://www.toymoban.com/news/detail-463396.html

到了这里,关于Junit5单元测试框架详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Junit5+Mockito单元测试详解

    1.宏观层面:AIR原则 A:Automatic(自动化) 全自动执行,输出结果无需人工检查,而是通过断言验证。 I:Independent(独立性) 分层测试,各层之间不相互依赖。 R:Repeatable(可重复) 可重复执行,不受外部环境( 网络、服务、中间件等)影响。 2.微观层面:BCDE原则 B: Bord

    2024年01月17日
    浏览(41)
  • SpringBoot2---单元测试(Junit5)(1)

    org.junit.vintage junit-vintage-engine test org.hamcrest hamcrest-core org.springframework.boot spring-boot-starter-test test 现在版本: @SpringBootTest class Boot05WebAdminApplicationTests { @Test void contextLoads() { } } 以前: @SpringBootTest + @RunWith(SpringRunner.class) SpringBoot整合Junit以后。 编写测试方法:@Test标注(注意需要

    2024年04月29日
    浏览(39)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(33)
  • 静态方法 单元测试 springboot+mokito+junit5

    CodecUtils的方法是静态类,使用@InjectMocks不能有用,因为这个注解只能用于非静态的对象。 想要为静态方法写单元测试,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一个MockedStatic对象,用于模拟静态方法的调用。 1.导入依赖 2.单元测试 可以参考如下地址,了解如何

    2024年04月25日
    浏览(42)
  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 单元测试 junit各版本 使用介绍 官

    2023年04月16日
    浏览(39)
  • SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    因为继承了 spring-boot-starter-parent ,所以我们依赖的 spring-boot-starter-test 不需要写具体的版本,可以直接集成父级的版本定义。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各种测试框架的, spring-boot-maven-plugin 是将 SpringBoot 应用打包为

    2024年04月15日
    浏览(46)
  • 深度揭秘JUnit5与Mockito的单元测试神秘面纱

    在今天的学习中,我们将深入研究 JUnit 和Mockito,这是 Java 开发中最强大的 单元测试 工具之一。通过学习如何编写清晰、高效的单元测试,我们将揭开单元测试的神秘面纱,助力你在项目中写出更健壮的代码。 提示: 今天的代码是在第九天代码的基础上进行开发,我们将为

    2024年02月02日
    浏览(49)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 2.1 单元测试的基本概念和原理 单元测试是一种测试方法,用于对软件系统中的最

    2024年02月03日
    浏览(38)
  • Spring Cloud中Controller单元测试 Junit5 & MockMvc

    在Spring Cloud中进行Controller的单元测试,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解决 No Scope registered for scope name \\\'refresh\\\' 异常 注入Mockmvc方式有两种 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    浏览(33)
  • 如何在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 单元测试是一种测试方法,用于对软件系统中的最小可测试单元进行测试。这些单

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包