JUnit5的新特性

news/2024/5/19 5:44:11 标签: 测试, JUnit, Junit5, 单元测试

前言:

JUnit5比4增加了很多新特性,最近刚使用了一下JUnit5记录一下看到和使用了的新特性,
先看下JUnit5的的包结构
JUnit5的包结构:

JUnit5和4开始支持的java版本也不一样,JUnit4需要Java 5或更高版本,JUnit 5需要Java 8或更高版本。

新特性:

1.断言

在Junit4中,org.junit.Assert具有所有断言方法来验证预期结果和结果。
例如:

public static void assertEquals(long expected, long actual)

JUnit5断言使用的是org.junit.jupiter.api.assertions不再是assert。
例如:

public static void assertEquals(short expected, short actual)

2.常用注解

JUnit4JUnit5说明
@Test@Test表示该方法是一个测试方法。JUnit5与JUnit 4的@Test注解不同的是,它没有声明任何属性,因为JUnit Jupiter中的测试扩展是基于它们自己的专用注解来完成的。这样的方法会被继承,除非它们被覆盖
@BeforeClass@BeforeAll表示使用了该注解的方法应该在当前类中所有使用了@Test @RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法之前 执行;
@AfterClass@AfterAll表示使用了该注解的方法应该在当前类中所有使用了@Test、@RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法之后执行;
@Before@BeforeEach表示使用了该注解的方法应该在当前类中每一个使用了@Test、@RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法之前 执行
@After@AfterEach表示使用了该注解的方法应该在当前类中每一个使用了@Test、@RepeatedTest、@ParameterizedTest或者@TestFactory注解的方法之后 执行
@Ignore@Disabled用于禁用一个测试类或测试方法
@Category@Tag用于声明过滤测试的tags,该注解可以用在方法或类上;类似于TesgNG的测试组或JUnit 4的分类。
@Parameters@ParameterizedTest 表示该方法是一个参数化测试
@RunWith@ExtendWith@Runwith就是放在测试类名之前,用来确定这个类怎么运行的
@Rule@ExtendWithRule是一组实现了TestRule接口的共享类,提供了验证、监视TestCase和外部资源管理等能力
@ClassRule@ExtendWith @ClassRule用于测试类中的静态变量,必须是TestRule接口的实例,且访问修饰符必须为public。

3.嵌套测试

测试用例比较多的情况下,JUnit5支持将测试用例嵌套,如下面的例子:
用DisplayName来标识测试用例,分层来显示

@DisplayName("A stack")
class TestingAStackDemo {
    Stack<Object> stack;

    @Test
    @DisplayName("is instantiated with new Stack()")
    void isInstantiatedWithNew() {
        new Stack<>();
    }

    @Nested
    @DisplayName("when new")
    class WhenNew {
        @BeforeEach
        void createNewStack() {
            stack = new Stack<>();
        }

        @Test
        @DisplayName("is empty")
        void isEmpty() {
            assertTrue(stack.isEmpty());
        }

        @Test
        @DisplayName("throws EmptyStackException when popped")
        void throwsExceptionWhenPopped() {
            assertThrows(EmptyStackException.class, () -> stack.pop());
        }

        @Test
        @DisplayName("throws EmptyStackException when peeked")
        void throwsExceptionWhenPeeked() {
            assertThrows(EmptyStackException.class, () -> stack.peek());
        }

        @Nested
        @DisplayName("after pushing an element")
        class AfterPushing {
            String anElement = "an element";

            @BeforeEach
            void pushAnElement() {
                stack.push(anElement);
            }

            @Test
            @DisplayName("it is no longer empty")
            void isNotEmpty() {
                assertFalse(stack.isEmpty());
            }

            @Test
            @DisplayName("returns the element when popped and is empty")
            void returnElementWhenPopped() {
                assertEquals(anElement, stack.pop());
                assertTrue(stack.isEmpty());
            }

            @Test
            @DisplayName("returns the element when peeked but remains not empty")
            void returnElementWhenPeeked() {
                assertEquals(anElement, stack.peek());
                assertFalse(stack.isEmpty());
            }

        }
    }
}

4.顺序测试

JUnit4中@FixMethodOrder注解来决定单测的执行顺序,但是这个很不方便,只能根据JVM或者名字排名来确定执行顺序。
JUnit5中引入了@TestMethodOrder方法,配合@Order注解就可以按照自己指定的顺序来进行单元测试
例如:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class OrderTest {

    @Test
    @Order(2)
    @Disabled
    public void testTwo() {
        System.out.println("执行单测2");
        assertEquals(1, 1);
    }

    @Test
    @Order(1)
    public void testOne() {
        System.out.println("执行单测1");
        assertEquals(1, 1);
    }

    @Test
    @Order(3)
    public void testThree() {
        System.out.println("执行单测3");
        assertEquals(1, 1);
    }
}

如上文的的输出就会是:

执行单元测试1
执行单元测试2
执行单元测试3

Order中可以填写的数字是非负数,数字越大,越后执行。


http://www.niftyadmin.cn/n/866165.html

相关文章

Jetson Nano(9)-- 增加swap空间

Nano入门教程基础篇-增加swap空间 说明&#xff1a; 介绍如何增加swap空间 步骤&#xff1a; 生成swapfile文件 sudo fallocate -l 4G /var/swapfile sudo chmod 600 /var/swapfile sudo mkswap /var/swapfile sudo swapon /var/swapfile设置为自动启用swapfile sudo bash -…

《刷新》读书笔记1-3章

引语&#xff1a; 萨提亚纳德拉是微软的第三代CEO&#xff0c;《刷新》是他写的一本书介绍了他的生平生活上的一些事迹和在微软进行改革的事情。 下面是看书的一些读书笔记&#xff0c;目前看完了前3章&#xff0c;总共9章。 读书笔记&#xff1a; 原文&#xff1a;萨提亚出生…

Jetson Nano(10) -- 编译并安装OpenCV 3.4.X

参考链接&#xff1a; https://jkjung-avt.github.io/opencv-on-nano/ Installing OpenCV 3.4.6 on Jetson Nano Quick link: jkjung-avt/jetson_nano As a follow-up on Setting up Jetson Nano: The Basics, my next step of setting up Jetson Nano’s software developm…

刷新-读书笔记2(4-7章)

导语&#xff1a; 刷新的4-8章的读书笔记&#xff0c;这个里面其实大部分都是软技能&#xff0c;思想上层面的一些感悟。但是里面有两点和以往不太一样第一个我反对的观点是萨提亚对于人们自由言论权高于国家之间的博弈甚至是挑衅&#xff0c;这个我不能理解&#xff1b;另外一…

ROS学习笔记(9)-- Ubuntu Tab键补全功能

解析ubuntu tab键不能自动补全命令的参数 这篇文章主要介绍了ubuntu tab键不能自动补全命令的参数,非常不错&#xff0c;具有参考借鉴价值&#xff0c;需要的朋友可以参考下 sudo gedit /etc/bash.bashrc 里面有这几行语句 #enable bash completion in interactive shells …

刷新-读书笔记3

刷新-读书笔记3 本文是刷新的8,9章的读书笔记&#xff0c;至此这本书已经读完了。下面列举了记录的一些读书笔记&#xff0c;最后有一个读书的总结。 原文&#xff1a;几乎可以这么说&#xff1a;我们是在创造一个新的物种&#xff0c;一个在智力上可能没有上限的物种。一些未…

ROS从入门到精通系列(十二)-- Turtlebot3机器人开发平台仿真

目录 1. 简介 详情请阅读:1. ROS官方教程;2. Turtlebot3中文教程系列

Linux -- git命令指南

一、创建与合并分支 1、 从master分支创建dev分支并切换到dev分支 git checkout master git checkout -b dev 其中&#xff0c;git checkout -b dev 等价于: git branch dev git checkout dev &#xff08;1&#xff09; git branch 查看本地当前的分支&#xff0c;分支…