首页 > 编程语言 >java测试框架Junit5进阶知识点

java测试框架Junit5进阶知识点

时间:2024-05-09 11:45:15浏览次数:23  
标签:知识点 java 进阶 void System 参数 println out name

声明参数化

导入注解

<!--        junit5新的编程和扩展模型-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
<!--Junit5参数化依赖-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

1、一个参数

  1. 将@test注解改为@ParameterizedTest,声明是一个参数化测试类,注:test 和parameterizedTest不可以一起用
  • 传递参数数据,使用@ValueSourse注解定义关键字进行类型声明
  • 测试方法前加入形参,接收参数化数据
// 场景一个参数的情况很少
public class ValueSourceDemoTest {

    // 1、将@Test竹节换为@ParameterizedTest,不可以结合使用
    // 声明测试类是一个参数化测试类
    // 2、传递参数数据
    // 使用单参数注解@ValueSource定义关键字进行类型声明
    @ValueSource(strings = {"张三","李四","王五"})
    // 3、在测试方法上加入形参,接收参数化数据
    @ParameterizedTest
    void valueSourceDemo(String name){
        System.out.println(name);
        assertEquals(name.length(),2);
    }
}

2、多个参数

第一种形式

public class CscSourceDemoTest {

    // 1、声明一个参数化的测试类
    @ParameterizedTest
    // 2、使用CsvSource进行传递参数化数据,传递的参数的格式是一个集合
    // 如果是多个参数,默认分割符 ","
    @CsvSource({"哈利,12", "赫敏,13", "罗恩,14"})
    void csvSourceDemo(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

    @ParameterizedTest
    // 使用delimiterString = "-"修改默认参数符
    @CsvSource(value = {"哈利-12", "赫敏-13", "罗恩-14"},delimiterString = "-")
    void csvSourceDemo2(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

//    也可以进行单参数
//    @CsvSource({"哈利", "赫敏", "罗恩"})
//    void csvSourceDemo(String name){
//        System.out.println(name);
//    }
}

第二种形式

  • 使用@paramterizedTest进行声明参数化测试
  • 使用MethodSource("stringProvider") 指定提供数据源的方法名
  • 定义一个静态方法,提供参数化数据源
  • 填加形参,要与静态方法中定义的元素类型一致
  • @MethodSource不提供方法名采用默认方法名一致的静态数据提供方法
public class MethodSourceTestDemo {

    // 1.声明参数化
    @ParameterizedTest
    // 2.通过MethodSource("") 指定数据源的方法名
    @MethodSource("stringProvider")
    // 4.添加形参,要和静态方法中定义的元素类型一致
    void methodSourceDemo(String name){
        System.out.println(name);
    }
    // 3.定义一个静态方法,提供参数化数据源
    static Stream<String> stringProvider(){
        return Stream.of("张三","李四");
    }

    // 1.声明参数化
    @ParameterizedTest
    // 2.采用MethodSource,默认指定与方法命名的静态数据源
    @MethodSource
    // 4.添加形参,要和静态方法中定义的元素类型一致
    void methodSourceDemo1(String name){
        System.out.println(name);
    }
    // 3.定义一个静态方法,提供参数化数据源
    static Stream<String> methodSourceDemo1(){
        return Stream.of("张三","李四");
    }
}

传入多个对象参数

// 多参数
public class MulitiMethodSourceDemoTest {
    // 1
    @ParameterizedTest
    // 2
    @MethodSource("objectProvider")
    // 4
    void multiMethodSourceDemo(String name,Integer age){
        System.out.println(name + "的年龄是" + age);
    }

    // 3
    static Stream<Arguments> objectProvider(){
        return Stream.of(
                Arguments.arguments("哈利",5),
                Arguments.arguments("赫敏",6)
        );
    }
}

3、以文件作为参数

public class CsvFileSourceDemoTest{

    // 声明参数化数据
    // @CsvFileSource 声明关键字
    // 文件前要加"/"

    @ParameterizedTest
    @CsvFileSource(resources = "/data.csv")
    void csvFileSourceDemo1(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

    @ParameterizedTest
  // 进行规定分割符 @CsvFileSource(resources = "/data2.csv",delimiterString = "|") void csvFileSourceDemo2(String name,int age){ System.out.println(name + "的年龄是" + age); } }

4、传入空参

public class EmptySourceDemoTest {
// 1、声明是一个参数化
@ParameterizedTest
// 2、使用EmptySource注解
@EmptySource
void nullSourceDemo(String param){
System.out.println(param);
}
}

5、传入null

public class NullSourceDemoTest {

    // 1、声明是一个参数化
    @ParameterizedTest
    // 2、使用NullSource注解
    @NullSource
    void nullSourceDemo(String param){
        System.out.println(param);
    }
}

6、null和empty都以作为参数进行传入

public class NullandEmptySourceDemoTest {
    // 1、声明是一个参数化
    @ParameterizedTest
    // 2、使用NullAndEmptySource注解
    @NullAndEmptySource
    void nullSourceDemo(String param){
        System.out.println(param);
    }
}

二、进行限制时间

public class TimeoutExampleTest {

    @Test
    //设定用例执行的超过时间,一旦超过x秒,则用例失败
    @Timeout(7)
    // 不仅适用于Test,还适应于BeforeEach,AfterEach
    // 也可以设置时间粒度
    void timeoutCaseOne() throws InterruptedException {
        System.out.println("第一条用例");
        sleep(10000);
    }

    // 配置时间单位
    @Test
    @Timeout(value = 3,unit = MILLISECONDS) // 时间粒度是毫秒 Second,Minute
    void timeoutCaseTwo(){
        System.out.println("第二条用例");
    }
}

三、显示名称

@DisplayName("霍格沃兹测试")
public class DisplayNameExampleTest {
    @Test
    // 定义一个显示名称
    @DisplayName("霍格沃兹第一条测试")
    void hogwartsOne(){
        System.out.println("第一条用例");
    }

}

 

标签:知识点,java,进阶,void,System,参数,println,out,name
From: https://www.cnblogs.com/JIANGzihao0222/p/18181712

相关文章

  • Java-读取resource目录下的文件并返回给前端
    我在项目的resource目录下面放了一个模板文件,用来供用户下载提供一个接口给前端,用来下载在Utils类下面写个方法来读取代码publicstaticvoidgetXMindTemplate(HttpServletResponseresponse){StringfileName="templates/TestCaseTemplate.xmind";//文件名称ClassPa......
  • Java-LocalDateTime时间和时间(时间加减)
    前言一开始使用Date类来表述时间属性一个问题是时间戳的问题,另一个问题是读取Excel数据格式的时候没有那么灵活 1.基本知识LocalDateTime是Java8引入的日期和时间API中的一个类,位于java.time包中。它提供了一种更灵活、更方便的方式来处理日期和时间,相比旧的Date类更为......
  • java 多线程CountDownLatch
     CountDownLatch简介CountDownLatch 是Java中的一个同步工具类,可以用来确保一组线程等待其他线程完成各自工作后再继续执行。CountDownLatch的应用场景CountDownLatch可以被广泛应用于各种多线程协作的场景,例如:主线程等待多个子线程完成后再执行下一步操作。多个子任......
  • Java学设计模式之工厂模式
    一、工厂模式概念工厂模式是一种创建型设计模式,用于创建对象而不需要暴露对象的创建逻辑。它将对象的实例化过程封装在一个单独的类中,使得客户端代码只需通过调用工厂类的方法来获取所需的对象,而无需关心具体的实例化过程。工厂模式通常有三种主要的变体:简单工厂模式、工厂方法......
  • 关于Java Chassis 3的契约优先(API First)开发
    本文分享自华为云社区《JavaChassis3技术解密:契约优先(APIFirst)开发》,作者:liubao68。契约优先(APIFirst)开发是指应用程序开发过程中,将API设计作为第一优先级的任务。契约优先开发随着WebServices概念的发展而不断得到重视,特别是微服务架构出现以后,API设计成为影响功能开放、......
  • 如果你还不了解 Java Class 文件结构,来看看这篇吧
    文章首发于【Java天堂】,跟随我探索Java进阶之路!Class文件是什么JavaClass文件是Java编译器将源代码编译后的二进制表示,它是Java虚拟机(JVM)运行的基础。Class文件绝大部分内容是在1997年发布的第一版《Java虚拟机规范》中就已经定义好的,后续20多年的发展过程当中Java经历了大......
  • 编程:java 发送email程序:通用版本:借鉴“蚂蚁小哥 <[email protected]>”的文章
     1packagecom.alibaba.otter.canal.adapter.launcher.loader;23importjava.text.SimpleDateFormat;4importjava.util.*;5importjavax.mail.*;6importjavax.mail.internet.*;78publicclassJavaxJavaMailClient{910private......
  • Java ThreadLocal 类的使用
    基于Java-ThreadLocal类的使用整理ThreadLocal表示线程的局部变量,当前线程可以通过set/get来对这个局部变量进行操作,其他线程不能对其进行访问ThreadLocal支持泛型,也就是支持指定value类型,像是ThreadLocal<Date>就是指定value为Date类型。每个线程会有一......
  • Java容器化改造
    dockerjava项目容器化改造前后端分离项目前端https://gitee.com/yuco/eladmin-web.git后端https://gitee.com/yuco/eladmin.git要素:vuenpmspringbootmysqlredisjava后端容器化思路:了解在物理机虚拟机的部署流程,然后编写dockerfile进行容器化部署。java项目,使用mv......
  • 对接诺诺电子发票(Java)
    沙箱环境:url:https://sandbox.nuonuocs.cn/open/v1/servicesappKey:SD63236305appSecret:SDDED2523BED4643下载诺诺的SDK:SDK下载引入项目: 服务实现层代码://创建发票信息表@OverridepublicInvoiceDtocreate(Invoiceresources){resources.setId(snowflake.......