【软件测试】JUnit详解

这篇具有很好参考价值的文章主要介绍了【软件测试】JUnit详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. Junit是什么?

JUnit是一个用于编写和运行Java程序单元测试的开源框架
它提供了一组注解和断言方法,以及用于执行测试的测试运行器。通过使用JUnit,开发人员可以轻松地编写自动化测试用例,验证代码的正确性,并且能够快速地发现和修复bug。JUnit的使用可以提高代码的质量和可维护性,同时也有助于进行持续集成和持续测试。它被广泛应用在Java开发领域中,成为了标准的单元测试框架之一。

为什么学了Selenium还需要学习Junit?
Selenium是自动化测试框架;Junit是单元测试框架.
拿着一个技术写自动化测试用例(Selenium3)
拿着一个技术管理已经编写好的测试用例(Junit5)

二.Junit中常见的注解

我们本节博客所学习的是Junit5,Junit5中的注解如下:

注解 说明
@Test 标识单元测试方法。
@ParameterizedTest 标识参数化测试方法。
@RepeatedTest 标识可重复执行的测试方法。
@TestFactory 标识动态测试方法,用于生成测试用例。
@BeforeEach 在每个测试方法之前执行。
@AfterEach 在每个测试方法之后执行。
@BeforeAll 在所有测试方法之前执行,只会执行一次。
@AfterAll 在所有测试方法之后执行,只会执行一次。
@DisplayName 设置测试类或测试方法的显示名称。
@Disabled 标识禁用的测试类或测试方法。
@Nested 声明内部测试类。
@Tag 为测试类或测试方法添加标签,用于分组和过滤。
@Timeout 设置测试方法执行超时时间。
@ExtendWith 注册扩展,用于扩展JUnit的功能。
@RegisterExtension 注册扩展实例,用于扩展JUnit的功能。

上述表格中,其中黑体为常用的注解,也是接下来主要介绍说明的注解.

想要使用Junit5的框架,我们首先要从中央仓库中引入Maven依赖.代码如下所示:

<dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>
        <!-- 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>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>

        <!-- 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>
            <scope>test</scope>
        </dependency>

1. @Test

@Test:用于标识单元测试方法。

    @Test
    void Test01() {
        System.out.println("这是JunitTest里面的Test01");
    }

【软件测试】JUnit详解,软件测试,junit,java

2. @BeforeAll & @AfterAll

@BeforeAll:在所有测试方法之前执行,只会执行一次。
@AfterAll:在所有测试方法之后执行,只会执行一次。

    @Test
    void Test01() {
        System.out.println("这是JunitTest里面的Test01");
    }
    @Test
    void Test02() {
        System.out.println("这是JunitTest里面的Test02");
    }
    @BeforeAll
    static void SetUp() {
        System.out.println("这是BeforeAll里面的语句");
    }

    @AfterAll
    static void TearDown() {
        System.out.println("这是AfterAll的语句");
    }

【软件测试】JUnit详解,软件测试,junit,java

3. @BeforeEach & @AfterEach

@BeforeEach: 在每个测试方法之前执行。
@AfterEach: 在每个测试方法之后执行。

    @Test
    void Test01() {
        System.out.println("这是JunitTest里面的Test01");
    }
    @Test
    void Test02() {
        System.out.println("这是JunitTest里面的Test02");
    }
    @BeforeEach
    void BeforeEachTest() {
        System.out.println("这是BeforeEach里面的语句");
    }

    @AfterEach
    void AfterEachTest() {
        System.out.println("这是AfterEach里面的语句");
    }

【软件测试】JUnit详解,软件测试,junit,java

4. @ParameterizedTest参数化

@ParameterizedTest: 标识参数化测试方法。

  1. 单参数

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

    【软件测试】JUnit详解,软件测试,junit,java

        @ParameterizedTest
        @ValueSource(strings = {"1", "2", "3"," "})
        void Test05(String number) {
            System.out.println(number);
            System.out.println("=============");
        }
    

    如果想要打印空格可以用空字符串
    【软件测试】JUnit详解,软件测试,junit,java

  2. CSV获取参数

        @ParameterizedTest
        @CsvFileSource(resources = "test01.csv")
        void Test06(String name) {
            System.out.println(name);
        }
    

    resource:test01.csv:

    张三1,李四1,王五1
    张三2,李四2,王五2
    张三3,李四31
    

    【软件测试】JUnit详解,软件测试,junit,java

  3. 方法获取参数

        public static Stream<Arguments> Generator() {
            return Stream.of(Arguments.arguments(1, "张三"),
                    Arguments.arguments(2, "李四"),
                    Arguments.arguments(3, "王五")
            );
        }	
        @ParameterizedTest
        @MethodSource("Generator")
        void Test07(int num, String name) {
            System.out.println(num + ":" + name);
        }
    

    【软件测试】JUnit详解,软件测试,junit,java

5. @Disabled

@Disabled: 标识禁用的测试类或测试方法。

@Disabled
    void Test03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)"));
    }

执行所有测试用例发现:
【软件测试】JUnit详解,软件测试,junit,java
Test03未被执行.

6. @Order

@Order 注解是 JUnit 5 中用来指定测试方法执行的顺序的注解。通过给测试方法添加 @Order 注解并指定一个整数值,可以确保测试方法按照指定的顺序执行。

import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest01 {
    @Order(2)
    @Test
    void B() {
        System.out.println("B测试用例");
    }

    @Order(3)
    @Test
    void Test01() {
        System.out.println("这是Test01测试用例");
    }

    @Order(1)
    @Test
    void A() {
        System.out.println("A测试用例");
    }

    @Order(4)
    @Test
    void Test02() {
        System.out.println("被忽略的测试用例");
    }

}

【软件测试】JUnit详解,软件测试,junit,java
可以看到,执行顺序使我们所手动指定的顺序.
上述例子中,@TestMethodOrder(MethodOrderer.OrderAnnotation.class) 注解指定了使用 OrderAnnotation 来排序测试方法。然后,每个测试方法都使用 @Order 注解指定了它们应该执行的顺序。
需要注意的是:测试方法的默认执行顺序是不确定的.因此使用 @Order 注解可以提供一致和可预测的执行顺序。

三. 测试套件

测试套件是一种组织和执行一组测试的方式。在JUnit中,可以使用 @RunWith 注解和 Suite 类来创建测试套件。

1. 通过class运行测试用例

	@Suite
	//通过class测试用例运行
	@SelectClasses({JunitTest03.class, JunitTest.class, JunitTest01.class})
	public class RunSuite {
	}

【软件测试】JUnit详解,软件测试,junit,java

2. 通过包运行测试用例

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectPackages(value = {"Test09", "Test08"})
public class RunSuite {
}

package Test08;

import org.junit.jupiter.api.Test;

public class Test07 {
    @Test
    void Test007() {
        System.out.println("Test08 pacage Test007");
    }
}
package Test09;

import org.junit.jupiter.api.Test;

public class Test09 {
    @Test
    void Test01() {
        System.out.println("package test09 test01");
    }
}

【软件测试】JUnit详解,软件测试,junit,java

四. 断言

JUnit 5 中,断言方法位于 org.junit.jupiter.api.Assertions 类中。

使用断言可以在测试中验证预期结果是否与实际结果相符。如果断言失败,则测试将被标记为失败,并提供有关错误的详细信息。这有助于快速定位和修复问题。

断言方法 说明
assertEquals(expected, actual) 验证两个对象是否相等。可以用于比较基本数据类型、对象和数组。
assertTrue(condition) 验证条件是否为真。如果条件为真,则测试通过;否则,测试失败。
assertFalse(condition) 验证条件是否为假。如果条件为假,则测试通过;否则,测试失败。
assertNull(actual) 验证对象是否为 null。如果对象为 null,则测试通过;否则,测试失败。
assertNotNull(actual) 验证对象是否不为 null。如果对象不为 null,则测试通过;否则,测试失败。
assertSame(expected, actual) 验证两个对象引用是否相同。即判断两个对象是否指向同一个内存地址。
assertNotSame(unexpected, actual) 验证两个对象引用是否不相同。
assertArrayEquals(expectedArray, actualArray) 验证两个数组是否相等。用于比较数组的元素是否相等。
assertThrows(expectedType, executable) 验证代码块是否抛出了特定类型的异常。
assertTimeout(duration, executable) 验证代码块是否在指定的时间内执行完成,超过指定时间则测试失败。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class MyTest {

    @Test
    public void test() {
        String str = "Hello, World!";
        int number = 42;
        boolean condition = true;

        assertEquals("Hello, World!", str);
        assertTrue(number > 0);
        assertFalse(condition);
        assertNull(null);
        assertNotNull(str);
    }
}

上述例子中.assertFalse(condition);即测试中验证预期结果与实际结果不相符.
【软件测试】JUnit详解,软件测试,junit,java文章来源地址https://www.toymoban.com/news/detail-727653.html

到了这里,关于【软件测试】JUnit详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试技术实验一 JUnit 单元测试的环境搭建

    1、确安装并配置 IntelliJ IDEA开发环境 2、安装插件Junit4.x,进行测试环境搭建 3、根据给定的源代码,编写测试代码,并运行成功。 1、调试指导书给定的目标源代码,除掉明显的语法错误,记录正确无误的被测程序代码。被测程序 : (1) Account.Java (2)Tc_Account.java (3)由插

    2024年04月28日
    浏览(44)
  • 软件质量保证与测试技术实验报告(四)——JUnit单元测试

    1.实验名称——JUnit单元测试 2.实验目的 (1)利用Junit进行单元测试,理解单元测试的任务、同时理解这类测试工具的实现原理; (2)理解断言的基本概念和断言测试方法; 3.实验内容 题目1:完成课件中Score_List的单元测试。 题目2:这是一个简单的计算器类——Computer,能

    2023年04月23日
    浏览(51)
  • Java测试框架——JUnit详解(4&5)

    JUnit是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试,也是当下主流的Java测试框架 如果有对单元测试还不熟悉的小伙伴可以看一下我的这篇文章——浅谈单元测试,本文我们主要针对 JUnit 来讲解Java中的常用单元测试 关于JUnit4和5的区别可以参考这篇文章

    2024年01月17日
    浏览(35)
  • Junit 单元测试(详解)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! JUnit 是一种流行的单元测试框架,它可以帮助开发人员编写、运行和调试单元测试,以确保代码的

    2023年04月15日
    浏览(38)
  • 单元测试Junit使用与详解

    一、什么是单元测试 在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上

    2024年02月02日
    浏览(46)
  • Java中的JUnit是什么?如何使用JUnit进行单元测试

    JUnit是Java中最流行的单元测试框架之一。它可以帮助开发人员在代码编写过程中检测出错误和异常,从而提高代码的质量和可靠性。 JUnit是一个由Kent Beck和Erich Gamma创建的开源Java单元测试框架,它已经成为Java开发中最常用的测试框架之一。这个框架的主要目的是为了简化单元

    2024年02月12日
    浏览(71)
  • Junit5单元测试框架详解

    前面我们学习了Selenium自动化测试框架,但是有的时候测试用例会很多,我们需要一个工具来管理这些测试用例,而Junit就是一个很好的管理工具,简单点来说,Junit就是一个针对Java的单元测试框架; 目录 一. 关于Junit5 二. Junit使用 2.1 添加Maven依赖 2.2 注解 2.3 断言 2.4 套件

    2024年02月06日
    浏览(49)
  • JUnit5-单元测试操作详解

    JUnit 5是JUnit测试框架的下一个主要版本,用于编写和运行单元测试。 与以前版本的 JUnit 不同,JUnit 5 由来自三个不同子项目的多个不同模块组成。 JUnit 5 =  JUnit 平台 +  JUnit Jupiter  +  JUnit Vintage JUnit 平台 是在 JVM 上启动测试框架的基础。它还定义了 TestEngine 用于开发在平台

    2024年04月10日
    浏览(53)
  • Junit-4.12 测试方法『详解』

    总结如下 @BeforeClass 修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 ) @AfterClass 所修饰的方法通常用来对资源管理,如关闭数据库连

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包