当前位置: 首页 > news >正文

【软件测试】Junit单元测试框架 | 注解 | 参数化 | 测试套件

文章目录

    • Junit单元测试框架
        • 1.注解
            • @Test
            • @Disable
            • @BeforeAll、@AfterAll
            • @BeforeEach、@AfterEach
        • 2.参数化
            • 单参数
            • CSV获取参数
            • 多参数
            • 方法获取参数
            • 测试用例执行顺序
            • 断言
        • 3.测试套件
            • 通过class运行测试用例
            • 通过包来运行测试用例


Junit单元测试框架

Selenium3是自动化测试框架

Junit5是单元测试框架

  • Junit是针对Java的一个单元测试框架
1.注解
@Test
  • 表示当前的方法是一个测试用例

需要先添加依赖

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version><scope>test</scope>
</dependency>
public class JunitTest {@Testpublic void Test01(){System.out.println("学习Junit,Test01");}@Testvoid Test02(){System.out.println("Test02");}
}
@Disable
  • 忽略测试用例,直接跳过
    @Disabledvoid Test03() {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#s-top-left111 > a:nth-child(6)"));}
@BeforeAll、@AfterAll
    @BeforeAll//在所有的测试用例之前(比如创建驱动、打开网页)static void SetUp(){System.out.println("BeforeAll");}@AfterAll//在所有的测试用例之后(比如关闭浏览器)static void TearDown(){System.out.println("AfterAll");}
@BeforeEach、@AfterEach
    @BeforeEach//在每个测试用例之前执行void BeforeEachTest(){System.out.println("BeforeEach");}@AfterEach//在每个测试用例之后执行void AfterEachTest(){System.out.println("AfterEach");}
2.参数化

parameterized tests

需要引入依赖

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version>
</dependency>
单参数
    @ParameterizedTest@ValueSource(ints = {1,2,3})void Test04(int num){System.out.println(num);}@ParameterizedTest@ValueSource(strings = {"A","B","C"})void Test05(String number){System.out.println(number);}

会跑三次,每次拿一个数据

CSV获取参数
    @ParameterizedTest@CsvFileSource(resources = "test01.csv")void Test06(String name){System.out.println(name);}
csv文件
张三,李四,王五
张三2,李四2,王五2
张三3,李四3,王五3

运行几次,取决于csv有几行

多参数
    @ParameterizedTest@CsvSource({"1,2,3, ''"})void Test10(String x,String y ,int z ,String q){System.out.println(x);System.out.println(y);System.out.println(z);System.out.println(q);}
方法获取参数
    @ParameterizedTest@MethodSource("Generator")void Test07(int num,String name){System.out.println(num+":"+name);}public static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments(1,"张三"),Arguments.arguments(2,"李四"),Arguments.arguments(3,"王五"));}
测试用例执行顺序

执行指定的顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//按照指定顺序执行@Order(4)@Testpublic void Test01() {System.out.println("学习Junit,Test01");}
@TestMethodOrder(MethodOrderer.Random.class)
//随机执行
断言

断言相等

    @ParameterizedTest@ValueSource(ints = {1,2,3})void Test04(int num){System.out.println(num);Assertions.assertEquals(num,1);}

断言不相等

Assertions.assertNotEquals(2,num);

断言为空

        String str = null;Assertions.assertNull(str);String str = "null111";Assertions.assertNull(str);

断言不为空

        Assertions.assertNotNull(str);
3.测试套件
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version>
</dependency>
通过class运行测试用例
@Suite
@SelectClasses({JunitTest.class,JunitTest01.class})
//按照类写的顺序依次执行
public class RunSuite {}
通过包来运行测试用例
@Suite
@SelectPackages(value = {"package01","package02"})

点击移步博客主页,欢迎光临~

偷cyk的图

相关文章:

  • 算法训练营第七十三天 | Bellman_ford算法、SPFA算法、Bellman_ford之判断负权回路
  • 玄机——第三章 权限维持-linux权限维持-隐藏 wp
  • 【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)
  • 在使用Swagger-Knife4j时,如何配置Oauth2认证功能?
  • 核方法总结(四)——高斯过程回归学习笔记
  • MySQL之覆盖索引
  • Python作用域及其应用
  • 基于大数据架构的情感分析
  • docker配置redis主从复制
  • 2-2.自动微分机制
  • 获取个人免费版Ubuntu Pro
  • [Leetcode 128][Medium] 最长连续序列
  • 004 插入排序(lua)
  • OpenSSL EVP详解
  • PolyGen: An Autoregressive Generative Model of 3D Meshes代码polygen_encoder.py解读
  • bootstrap创建登录注册页面
  • express + mock 让前后台并行开发
  • go语言学习初探(一)
  • laravel 用artisan创建自己的模板
  • Less 日常用法
  • MaxCompute访问TableStore(OTS) 数据
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python学习之路16-使用API
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Web设计流程优化:网页效果图设计新思路
  • 复杂数据处理
  • - 概述 - 《设计模式(极简c++版)》
  • 关于List、List?、ListObject的区别
  • 官方解决所有 npm 全局安装权限问题
  • 今年的LC3大会没了?
  • 前端工程化(Gulp、Webpack)-webpack
  • 算法之不定期更新(一)(2018-04-12)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用element的upload组件实现多图片上传和压缩
  • 怎么将电脑中的声音录制成WAV格式
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • %check_box% in rails :coditions={:has_many , :through}
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (4)(4.6) Triducer
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二)hibernate配置管理
  • (二)丶RabbitMQ的六大核心
  • (原創) 未来三学期想要修的课 (日記)
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET 4.0中的泛型协变和反变
  • .NET C# 使用GDAL读取FileGDB要素类
  • .Net core 6.0 升8.0
  • .net core 连接数据库,通过数据库生成Modell
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 直连SAP HANA数据库
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?