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

Junit测试框架

一、简介

Junit框架是一个开源的Java语言单元测试框架,Java方向使用最广泛的单元测试框架,使用Java开发者都应该学习Junit并能掌握单元测试的编写。

对于Junit和Selenium的关系:通俗点来说Selenium如果比喻为灯泡,那么Junit就是电源。

二、常见使用方法 

注解

在Junit框架中使用注解可以实现单元测试。

@Test 

在方法前加上@Test注解就不用编写main方法,是直接可以运行该方法的。

@Test
public  void test01(){System.out.println("简单测试");
}

@BeforeEach 

在方法前加上BeforeEach表示在每执行一个测试方法之前,都要执行该方法一次。

    @Testpublic  void test01(){System.out.println("简单测试");}@Testpublic  void test02(){System.out.println("简单测试2");}@BeforeEachpublic  void test00(){System.out.println("测试");}

 @BeforeAll

在方法前加上BeforeEach表示在每执行测试之前都会执行该测试方法,但只执行一次,该方法必须用static修饰

    @org.junit.jupiter.api.Testpublic  void test01(){System.out.println("简单测试");}@org.junit.jupiter.api.Testpublic  void test02(){System.out.println("简单测试2");}@BeforeAllpublic  static void test00(){System.out.println("测试");}

  

@AfterEach:表示在每执行一个测试方法之前,都要执行该方法一次。

@AfterAll:表示在执行测试之后执行该方法一次,也要求是静态方法。

这两种注解与@BeforeEach和@BeforeAll用法相似,便不再进行演示。

断言 

assertEquals和assertNotEquals

assertEquals:比较要测试的是否与预期的一致。

assertNotEquals:比较要测试的是否与预期的不一致。

    ChromeDriver driver = new ChromeDriver();@org.junit.jupiter.api.Testpublic void assertTest(){driver.get("https://www.baidu.com");String str = driver.findElement(By.xpath("//*[@id=\"su\"]")).getAttribute("value");Assertions.assertEquals("百度一下",str);}

assertTrue和assertFalse 

参数为布尔表达式用于判断真假。

assertTrue:参数中布尔表达式为真时,测试通过。

assertFalse:参数中布尔表达式为假时,测试通过。

    @org.junit.jupiter.api.Testpublic void assertTest(){driver.get("https://www.baidu.com");String str = driver.findElement(By.xpath("//*[@id=\"su\"]")).getAttribute("value");Assertions.assertTrue("百度一下".equals(str));}

assertNull 和assertNotNull

assertNull 和assertNotNull这两个方法来判断参数是否为空。

    @org.junit.jupiter.api.Testpublic void assertTest(){driver.get("https://www.baidu.com");String str = driver.findElement(By.xpath("//*[@id=\"su\"]")).getAttribute("value");Assertions.assertNotNull(str);driver.quit();}

测试用例的执行顺序 

Junit的默认的执行顺序是不确定的,官方的用例并没有明确指出,如果测试之间有关联,这就需要使用Junit提供的方法来手动设置测试用例的执行顺序,在类前加上TestMethodOrder注解,标注当前类使用方法进行排序,在类中的方法前使用order注解注明顺序。

但是在编写测试用例时尽量保持其独立性。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Test {@org.junit.jupiter.api.Test@Order(1)public void test1(){System.out.println("测试1");}@org.junit.jupiter.api.Test@Order(2)public void test2(){System.out.println("测试2");}@org.junit.jupiter.api.Test@Order(3)public void test3(){System.out.println("测试3");}
}

测试套件 

测试套件Suite,可以将指定文件添加到套件执行。可以使用@SelectClasses()注解,以及@SelectPackages()注解。

@Suite
@SelectClasses(Test.class)
public class AutoTest {
}

参数化 

在测试方法中可以添加参数进行测试,使用@Parameterizedtest来标注方法类型为参数化,并且不需要再添加@Test注解,否则就会再多执行一次。

单参数 

使用@ValueSource(类型={参数1,参数2……},在指明类型时需要使用原生类型,在基本数据类型之后加上s,例如:ints、floats。

    @ParameterizedTest@ValueSource(ints = {1,23,0,9})public void test1(int a){System.out.println(a);}

多参数 

使用@CSVSource(Value={"小明,98","张三,100",……}

多参数之间默认使用,如果修改需要使用delimeterString指定分隔字符。

@ParameterizedTest@CsvSource(value = {"小明-100","刘洋-99"},delimiterString = "-")public void test2(String name,int score){System.out.println("姓名:"+name+" 成绩:"+score);}

当参数过多的话就可以使用文件进行处理,使用CSVFileSource注解 

    @ParameterizedTest@CsvFileSource (files = "D:\\test.txt")public void test2(String name,int score){System.out.println("姓名:"+name+" 成绩:"+score);}

动态参数 

单参数

使用@MethodSource()进行注解,参数为数据来源的方法名,如果不指定参数,就默认找跟用例同名的静态方法。

 @ParameterizedTest@MethodSource("dataSource")public void test0(String str){System.out.println(str);}public static Set<String> dataSource(){Set<String> set = new HashSet<>();set.add("小明,90");set.add("张强,98");set.add("王志,100");return set;}

多参数 

@ParameterizedTest@MethodSource("dataSource")public void test0(String name,int score){System.out.println(name+":"+score);}public static Stream<Arguments> dataSource(){return Stream.of(Arguments.arguments("jim",90),Arguments.arguments("lucy",99));}

http://www.lryc.cn/news/30726.html

相关文章:

  • 操作系统复习题
  • web项目的初始化
  • 29- 迁移学习 (TensorFlow系列) (深度学习)
  • 工具篇(五)炫酷排版,尽在LaTeX:让你的文档飞升吧!
  • 【蓝桥杯PythonB组备赛】【Acwing周赛】第93场 4867. 整除数 4868. 数字替换 python解
  • KNN学习报告
  • Java奠基】方法的讲解与使用
  • 字符串hash
  • 试题 算法训练 转圈游戏
  • 【uni-app教程】九、运行环境判断与跨端兼容
  • 扩展WSL2虚拟硬盘的大小
  • Win系统蓝牙设备频繁卡顿/断连 - 解决方案
  • Git学习入门(2)- 基本命令操作总结
  • SPringCloud:Nacos快速入门及相关属性配置
  • 医疗器械之模糊算法(嵌入式部分)
  • 网上销售笔记本系统
  • MySQL基础查询操作
  • English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三
  • Condition 源码解读
  • 看完这篇入门性能测试
  • 推导部分和——带权并查集
  • 费解的开关/翻硬币
  • OpenGL中的坐标系
  • Spring——Spring介绍和IOC相关概念
  • A+B Problem
  • 【ROS学习笔记11】ROS元功能包与launch文件的使用
  • 【python】
  • 充电协议: 快充协议,如何选充电宝?
  • 视觉SLAM十四讲ch6 非线性优化笔记
  • Nikto工具使用指南