JUnit 测试框架

news2024/11/27 20:38:18

JUnit

  • 注解
    • @test 注解
    • @BeforeEach 注解
    • @BeforeAll
    • @ AfterEach
    • @AfterAll
  • 断言
    • assertEquals
    • assertNotEquals
    • assertTrue
  • 用例执行顺序
  • 测试套件
    • 指定类,添加到套件中并执行
    • 一次添加一个包的类
  • 参数化
    • 单参数
    • 多参数
    • 借助文件
    • 动态参数

注解

@test 注解

通过对方法加上 @test 注解,就可以直接运行方法进行测试:

@Test
void Test() {
    ChromeDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");
    driver.findElement(By.cssSelector("#kw")).sendKeys("火锅");
    driver.quit();
}

@BeforeEach 注解

就是在执行其它测试方法之前,会先执行这个注解的方法:

@BeforeEach
void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@BeforeAll

不过要注意的是 @BeforeAll 注解的方法必须是 static 的:

@BeforeAll
@Test
static void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@ AfterEach

@AfterEach 注解就是在方法之后执行这个方法:

@AfterEach
void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

@AfterAll

@AfterAll 注解的作用是在所有测试方法后执行:

@AfterAll
static void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
在这里插入图片描述

断言

assertEquals

通过 Assertions.assertEquals 可以判断元素的 value 值与期望值相不相等:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertEquals("百度一下",text);
    driver.quit();
}

因为预期结果与实际结果是一样的,所以测试是可以通过的。

assertNotEquals

和 assertEquals 正好相反,也就是与期望值不一样的时候,可以通过:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertNotEquals("百度一下",text);
    driver.quit();
}

因为与期望值一样,所以这里是不通过的。

assertTrue

参数是一个表达式,如果表达式为真,就通过:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertTrue(text.equals("百度一下"));
    driver.quit();
}

用例执行顺序

通过 JUnit 里面提供的方法来手动设置用例的执行顺序。通过 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 方法排序来完成。不排序的时候:

public class AutoTest {
    @Test
    void aaa() {
        System.out.println("aaa");
    }
    @Test
    void bbbbb() {
        System.out.println("bbb");
    }
    @Test
    void cccc() {
        System.out.println("ccc");
    }
    @Test
    void dddddd() {
        System.out.println("ddd");
    }
}

运行结果如下:
在这里插入图片描述

排序的时候 通过 @Order 注解来进行排序,标注执行顺序:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AutoTest {
    @Test
    @Order(1)
    void aaa() {
        System.out.println("aaa");
    }
    @Test
    @Order(2)
    void bbbbb() {
        System.out.println("bbb");
    }
    @Test
    @Order(3)
    void cccc() {
        System.out.println("ccc");
    }
    @Test
    @Order(4)
    void dddddd() {
        System.out.println("ddd");
    }
}

运行结果如下:
在这里插入图片描述

测试套件

主要就是针对很多个测试类来进行测试,比如说要一次测试多个类,并且去进行测试。

指定类,添加到套件中并执行

适用于添加少量的几个类
在这里插入图片描述
通过 @Suite 来把多个类加在一起,就可以一次性进行测试了:

@Suite
@SelectClasses({AutoTest.class,AutoTest2.class})
public class RunAllSuite {

}

运行结果如下:
在这里插入图片描述

一次添加一个包的类

通过 @SelectPackages() 注解来实现一次添加一个包里面的测试类。不过要注意的是,测试类的名字,必须是以 Test 结尾的,否则不会进行测试:

@Suite
@SelectPackages("com.example.onlinemusic.autotest")
public class RunAllSuite {

}

运行结果如下:
在这里插入图片描述

参数化

单参数

对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源:

@ParameterizedTest
@ValueSource(strings = {"火锅","辣条","螺蛳粉","面条"})
void test(String name) {
    System.out.println("name: "+name);
}

数据来源就是 ValueSource 里面的参数。运行结果如下:
在这里插入图片描述

多参数

通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号:

@ParameterizedTest
@CsvSource(value = {"火锅,20","辣条,30","螺蛳粉,40","铁锅炖大鹅,50"})
void test(String name, int age) {
    System.out.println("name: "+name + " age: " + age);
}

运行结果如下:
在这里插入图片描述
也可以通过 delimiterString = 来指定分隔符。

借助文件

通过 @CsvFileSource(resources = ) 来读取文件,然后进行操作,指定文件路径为当前项目下 resources 目录下的 my.scv 文件:

@ParameterizedTest
@CsvFileSource(resources = "/my.csv")
void test(String name, int age) {
    System.out.println("name: "+name + " age: " + age);
}

动态参数

通过 @MethodSource() 注解来提供参数:

@ParameterizedTest
@MethodSource("test2")
void test1(String x) {
    System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream<String> test2() {
    return Stream.of("火锅","辣条","螺蛳粉");
}

运行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计二手书店设计论文Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

DocArray 0.20.0 发布!新增 Milvus 后端支持,更好地嵌套数据搜索,新增 RGB-D 格式的 3D 模型表示

DocArray 是一个用于处理、传输和存储多模态数据的 Python 工具包。DocArray 提供便捷的多模态数据处理功能&#xff0c;具备基于 Protobuf 提供高性能的网络传输性能&#xff0c;同时也为多种向量存储方案提供统一的 API 接口。 GitHub&#xff1a;github.com/docarray/docar…

外包公司面试门槛高吗?软件测试员进外包公司容易吗?

虽然很多测试人员都抵制外包&#xff0c;但实际情况则是依旧有大量软件测试员&#xff0c;选择加入到外包这个圈子。外包公司面试门槛高吗?外包公司容易进吗?本篇来解答一下这个问题。 外包公司面试门槛高吗&#xff1f; 外包的面试门槛&#xff0c;相对大厂要低很多。尤其…

二、Docker 阿里云镜像加速

1、为什么需要增加镜像加速 咱们先看运行 hello word 都干了哪些事情 "Unable to find image hello-world:latest locally" 是说本地没有hello-world 这个images(镜像) "latest: Pulling from library/hello-world" 本地没有那就得去拉取 这段是拉取 i…

尚医通-MyBatisPlus:查询-删除(四)

&#xff08;1&#xff09;MyBatis-简单查询-分页查询 &#xff08;2&#xff09;MyBatisPlus删除与逻辑删除 &#xff08;1&#xff09;MyBatis-简单查询-分页查询 1.1通过多个id批量查询 完成了动态sql的foreach的功能 //多个id批量查询Testpublic void testSelect1() { …

C++ 入门篇之类 对象的关系

&#x1f4d2;博客主页&#xff1a; ​​开心档博客主页​​ &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由开心档原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2022年12月12日&#x1f334; ✉…

docker(3):镜像分层原理

目录UnionFS&#xff08;联合文件系统&#xff09;docker镜像加载原理分层理解commit镜像docker中&#xff0c;镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含运行某个软件所需的所有内容、包括代码、运行时…

【计算机网络】HTTP首部详解

HTTP首部详解HTTP 协议的请求和响应报文中必定包含 HTTP 首部。首部内容为客户端和服务端分别处理请求和响应提供所需要的信息。对于客户端用户来说&#xff0c;这些信息中的大部分内容都无需亲自查看。 1.HTTP请求报文 2.HTTP响应报文 3.首部字段类型 3.1 通用首部字段 首部…

在线CAD-梦想云图Node.JS服务

说明 后台提供梦想Node.JS服务&#xff0c;方便调用控件后台功能&#xff0c;Bin/MxDrawServer的安装目录中有Linux和Windows两个文件夹&#xff0c;用户可以根据自己的操作系统下载对应的程序。 启动服务 Windows:进入Bin\MxDrawServer\Windows目录&#xff0c;运行start.ba…

大数据毕业设计 新闻分类算法实现

文章目录1 简介1.1 本文章博主将介绍:2 参与及比较算法3 先说结论4 实现过程4.1 数据爬取4.2 数据预处理5 CNN文本分类6 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦…

JUC并发编程详解

JUC并发编程详解一、Callable接口二、ReentrantLock类三、原子类四、线程池五、信号量Semaphore六、闭锁CountDownLatch七、线程安全的集合类7.1 多线程环境使用 ArrayList7.2 多线程环境使用队列7.3 多线程环境使用哈希表JUC > java.util.concurrent&#xff0c;这个包里放…

【AI with ML】第 1 章 :TensorFlow 简介

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

python使用bs模块爬取小说数据

目录 一、BS模块介绍 二、分析页面架构 三、代码实现 四、结果展示 五、总结思路 一、BS模块介绍 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要抓取的数据…

【云计算与大数据技术】Hadoop MapReduce的讲解(图文解释,超详细必看)

一、Hadoop MapReduce架构 MapReduce 是一种分布式计算框架,能够处理大量数据 ,并提供容错 、可靠等功能 , 运行部署在大规模计算集群中&#xff0c;MapReduce计算框架采用主从架构&#xff0c;由 Client、JobTracker、TaskTracker组成 Client的作用 用户编写 MapReduce程序…

Debye-Wolf积分计算器

摘要 众所周知&#xff0c;Debye-Wolf积分可用于以半解析方式计算焦平面附近的矢量场。Debye-Wolf积分通常用作分析高数值孔径显微镜成像情况的基本工具。它是基于理想模型&#xff0c;因此不需要待求镜头精确规格的知识。该用例将解释如何在VirtualLab Fusion中使用Debye-Wolf…

Guitar Pro8更新了多达30项功能优化

很多人在听到Guitar Pro这个名词时&#xff0c;本能反应就是跟吉他有关的软件吧&#xff0c;但是具体是什么样子&#xff0c;有什么功能我们却不一定知道的那么详细&#xff0c;下面呢&#xff0c;我们就来详细的介绍下Guitar Pro这款软件。 Guitar Pro是初学作曲&#xff0c;特…

openlayers百万级和千万级数据量的矢量切片在渲染过程中的技术难点解析

目录1 前言2 数据介绍3 切片方案及技术难点3.1 大数据量图层矢量切片无法正确返回结果3.2 矢量切片标注过程中标注拥挤3.3 矢量切片每一块切片都进行了标注&#xff0c;形成了冗余3.4 矢量切片标注的随机性会造成时而在中央&#xff0c;时而在边界上3.5 特殊样式的制作3.6 图层…

Jmeter(九):jmeter_逻辑控制器_事务控制器HTTP Cookie管理器

Jmeter(19)&#xff1a;jmeter_逻辑控制器_事务控制器 事务&#xff1a; 性能测试中&#xff0c;事务指的是从端到端&#xff0c;一个完整的操作过程&#xff0c;比如一次登录、一次 筛选条件查询&#xff0c;一次支付等&#xff1b;技术上讲&#xff1a;事务就是由1个或多个…

C# Spire.Xls将DataTable导出到Excel并加密

背景需求&#xff1a; 页面展示信息列表&#xff0c;需要将数据导出到Excel并加密sheet文件和工作簿结构。 代码思路&#xff1a;1.将数据转换为dataTable&#xff0c;2.将dataTable导出到Excel&#xff0c;3.处理加密。 文章目录引入必要的dll文件1.将数据转换为DataTable2.将…

Python英文词频统计(哈姆雷特)程序示例

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python英文词频统计程序示例&#xff0c;主要是对英文文本——《哈姆雷特》进行分词。 一、英文文本词频统计思路 想要对《哈姆雷特》进行英文单词词频统计&#xff0c;那么我们首先需要拿到《哈姆雷特》的原文&a…