Junit测试框架

简介: Junit测试框架

一、简介

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

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

二、常见使用方法

注解

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

@Test

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

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

@BeforeEach

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

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

@BeforeAll

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

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

 

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

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

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

断言

assertEquals和assertNotEquals

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

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

    ChromeDriver driver = new ChromeDriver();
    @org.junit.jupiter.api.Test
    public 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.Test
    public 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.Test
    public 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));
   }

7ee0270c88e14ed7aa7f2d55fd3a1ded.png

目录
相关文章
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
153 11
|
2月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
2天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
30 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
24天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
109 15
|
2月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
500 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
89 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
60 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
3月前
|
Java 测试技术 API
探索软件测试中的自动化框架选择####
在当今快节奏的软件开发周期中,自动化测试已成为确保产品质量与加速产品迭代的关键策略。本文深入剖析了自动化测试的核心价值,对比分析了市场上主流的自动化测试框架,旨在为项目团队提供选型时的考量因素及实践指南,助力高效构建适应未来变化的自动化测试体系。 ####
102 40
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。