JUnit5部分新特性

1.JUnit5简介

官方文档

1.1 组成模块

区别于junit4,Junit5由三个子模块组成:
JUnit Platform:作为测试框架的基础平台,启动测试框架;
JUnit Jupiter: JUnit5扩展的新的编程模型和扩展模型,功能模块核心,编写测试用例;
JUnit Vintage:允许兼容JUnit3,4,在新的JUnit平台上运行旧的JUnit 3 和 4 的测试。
相比于junit4,junit新增了动态工厂测试,嵌套测试,参数化测试,重复测试,构造函数和方法的实例化,注册扩展等功能,同时也支持junit4的运行

1.2 使用

1.2.1 添加依赖

IDEA 高版本集成了JUnit5的功能,springboot项目会自动的引入了junit5的核心功能模块依赖,因此在springboot项目中使用只需要添加依赖

       <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
1.2.2 启动配置

测试类添加启动测试类注解@RunWith(JUnitPlatform.class),表示用junit5平台上启动测试类

2.部分新特性介绍

2.1 测试集

新建测试类,启动类用Suite.class,并添加需要测试的类,多个类用","隔开

@RunWith(Suite.class)
@Suite.SuiteClasses({AreaDaoTest.class,DaoTest.class})

2.2 常用注解

@DisplayName:声明测试类或测试方法
@Disabled:禁用测试,相当于junit的@Ignore
@Order:结合@TestMethodOrde一起使用设置测试方法的执行顺序
@ParameterizedTest:参数化测试
@RepeatedTest:重复测试

@Tag:标签,相当于Junit4中的分组测试
@Nested:嵌套测试
@TestFactory:动态测试工厂

2.3 断言升级

支持lambda表达式,使用assertAll方法进行断言组测试

2.4举个栗子

2.4.1 参数化测试
    @DisplayName("参数化测试")
    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void parameter(int candidate) {
        assertTrue(candidate > 0 && candidate < 4);
    };

会依次执行当参数为1,2,3时是否满足断言条件。

2.4.2 设置测试方法执行顺序
 @Test
    @DisplayName("根据id查询案例,第三执行")
    @Order(3)
    void getAreaById() {
        Area area = areaDao.getAreaById(12);
    }

在测试类前面添加:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
2.4.5 用lambda表达式添加断言组
        Area area = new Area("中国北京",3);
        assertAll("area initialized error ",
                () -> assertNotNull(area.getAreaName()),
                () -> assertNotNull(area.getPriority())
        );
        // () -> 表达式,返回的是这个表达式的值
        // (x,y) -> (x+y) ,(2,3) -> (2+3) 返回的是5

断言组嵌套:

// 两个参数一起判断,每个参数的判断都用了一个assertAll,作为第一assertAll的第二个和第三个参数表达式
assertAll("params checkout",
                () -> {
            String areaName = area.getAreaName();
            assertAll("areaName is not valid",
                    () -> assertTrue(areaName.contains("成都")),
                    () -> assertTrue(areaName.startsWith("四川")));
                },
                () -> {
            int priority = area.getPriority();
            assertAll("priority is not valid",
                    () ->  assertTrue(priority> 1),
                    () -> assertTrue(priority<10));
                }
                
                );

你可能感兴趣的:(JUnit测试,java)