码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JUnit5单元测试框架简单使用


    目录

    Junit5的依赖

    1,注解

    1),@Test

     2),Before

    3),After

    2,断言

    3,用例执行顺序(没有确切得执行顺序,自己定义执行顺序)

    @Order:方法排序

    4,参数化:当测试方法要使用多个参数,或者是由多个测试用例,可以通过参数化,从文件或者从方法,或者从数组中获取测试用例。

    单参数:

    多参数:

    多参数文件读入:

     多参数本地文件输入

    动态单参数:

    动态多参数:

    5,测试套件:通过在一个类上定义套件注解,将多个测试类得测试方法一次性全部执行


    Junit:开源的java单元测试框架

    Junit官方文档:Junit.org

    Junit5的依赖

    1. <dependency>
    2. <groupId>junitgroupId>
    3. <artifactId>junitartifactId>
    4. <version>4.11version>
    5. <scope>testscope>
    6. dependency>
    7. <dependency>
    8. <groupId>org.junit.jupitergroupId>
    9. <artifactId>junit-jupiterartifactId>
    10. <version>5.8.2version>
    11. <scope>testscope>
    12. dependency>
    13. <dependency>
    14. <groupId>org.junit.platformgroupId>
    15. <artifactId>junit-platform-suiteartifactId>
    16. <version>1.8.2version>
    17. <scope>testscope>
    18. dependency>
    19. <dependency>
    20. <groupId>org.junit.platformgroupId>
    21. <artifactId>junit-platform-reportingartifactId>
    22. <version>1.8.2version>
    23. <scope>testscope>
    24. dependency>
    private ChromeDriver driver = new ChromeDriver();

    1,注解

    1),@Test

    1. @Test
    2. public void zhujieTest(){
    3. driver.get("http://www.baidu.com");
    4. driver.findElement(By.cssSelector("#kw")).sendKeys("123");
    5. driver.quit();
    6. }

     2),Before

    @BeforeEach:在每个方法执行前都要执行一遍

    @BeforeAll:所有方法执行前只需要执行一遍

    使用BeforeAll的方法必须是静态的。

    3),After

    @AfterEach:所有方法执行后都需要执行一遍

    @AfterAll:所有方法执行结束最后在执行一次

    2,断言

    预言测试用例的测试结果

    1. @Test
    2. driver.get("http://www.baidu.com");
    3. String value = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    4. Assertions.assertEquals("百度一下",value);//断言结果为百度一下
    5. Assertions.assertTrue("百度一下".equals(value));//断言结果为百度一下
    6. Assertions.assertFasle("百度一下".equals(value));//断言结果为百度一下
    7. Assertions.assertNull(value);//断言结果为null
    8. Assertions.assertNotNull(value);//断言结果不为空

    3,用例执行顺序(没有确切得执行顺序,自己定义执行顺序)

    @Order:方法排序

    1. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)//按照自定义顺序排序
    2. public class OrderTest {
    3. @Test
    4. @Order(3)
    5. public void fdsa(){
    6. System.out.println(1);
    7. }
    8. @Test
    9. @Order(1)
    10. public void sdfs(){
    11. System.out.println(2);
    12. }
    13. @Test
    14. @Order(4)
    15. public void fa(){
    16. System.out.println(3);
    17. }
    18. @Test
    19. @Order(2)
    20. public void gdsg(){
    21. System.out.println(4);
    22. }
    23. }

    多个测试用例之间需要排序,在测试中多个测试用例之间可能存在关联关系,不定义执行顺序会导致执行的顺序发生变化,出现错误。

    4,参数化:当测试方法要使用多个参数,或者是由多个测试用例,可以通过参数化,从文件或者从方法,或者从数组中获取测试用例。

    单参数:

    1. @ParameterizedTest//参数化注解,需要添加参数来源
    2. @ValueSource(strings = {"fds","yy","pp"})//参数来
    3. public void paratest(String name){
    4. System.out.println(name);
    5. }

    多参数:

    1. @ParameterizedTest
    2. @CsvSource(value = {"name1,10","name2,12","name,23"})//多参数
    3. public void test(String name,int age){
    4. System.out.println(name+":"+age);
    5. }

    多参数文件读入:

    1. @ParameterizedTest
    2. @CsvFileSource(resources = {"/my.csv"})
    3. public void fromFile(String name,int age){
    4. System.out.println(name+":"+age);
    5. }

     多参数本地文件输入

    1. @ParameterizedTest
    2. @CsvFileSource(files = {"文件路径+文件名"})
    3. public void fromFileLocal(String name,int age){
    4. System.out.println(name+":"+age);
    5. }

    动态单参数:

    1. //动态参数
    2. @ParameterizedTest
    3. @MethodSource("method")
    4. public void formMethod(String s){
    5. System.out.println(s);
    6. }
    7. //定义提供数据流的方法
    8. public static Stream method(){
    9. return Stream.of("张三","李四","王五");
    10. }
    1. //动态参数
    2. @ParameterizedTest
    3. @MethodSource//不指定数据来源,默认找同名的静态方法
    4. public void method(String s){
    5. System.out.println(s);
    6. }
    7. //定义提供数据流的方法
    8. public static Stream method(){
    9. return Stream.of("张三","李四","王五");
    10. }

    动态多参数:

    1. //多参数动态参数
    2. @ParameterizedTest
    3. @MethodSource
    4. public void fromMethodMulti(String name,int age){
    5. System.out.println(name + ":" + age);
    6. }
    7. static Stream fromMethodMulti(){
    8. return Stream.of(Arguments.arguments("lili",19),Arguments.arguments("lele",20));
    9. }

    5,测试套件:通过在一个类上定义套件注解,将多个测试类得测试方法一次性全部执行

    1. @org.junit.platform.suite.api.Suite
    2. @SelectClasses({autoTest.class,OrderTest.class})//按照类测试
    1. @org.junit.platform.suite.api.Suite
    2. @SelectPackages("com.Junit")//按照包名调用
    1. //通过测试套件,将所有的测试类,一次启动执行全部类的测试方法
    2. @org.junit.platform.suite.api.Suite
    3. @SelectClasses({autoTest.class,OrderTest.class})
    4. public class Suite {
    5. }

    套件下的所有测试方法,都需要有@Test注解

  • 相关阅读:
    新能源车后市场:华胜、蔚来、途虎严阵以待
    【Linux学习笔记一】虚拟机的创建与Linux安装
    前端调取摄像头并实现拍照功能
    Ubuntu上安装、使用Redis的详细教程
    LiveData 的使用和原理
    java中一切都是对象,为什么int不用创建对象实例化,而可以直接使用?
    巴以冲突中暴露的摄像头正对安全构成威胁
    如何构建 API 生态促进企业上下游合作
    图像识别(五)| 春天花开却不识?打开百度识图,残差和卷积带你识遍路边野花
    【Linux操作系统】——安装CentOS系统
  • 原文地址:https://blog.csdn.net/qq_52655865/article/details/126082365
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号