常见的Java单元测试框架有哪些?

常见的 Java 单元测试框架有 JUnit、TestNG、Spock 等。

JUnit

JUnit 是一个 Java 单元测试框架,它是一个 Open Source 软件,遵循 Apache2.0 许可。JUnit 提供了一些注解和断言,可以使用它们编写测试代码。

示例说明

  1. 创建被测试类
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}
  1. 创建测试类
import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    void setUp() {
        this.calculator = new Calculator();
    }

    @Test
    void testAdd() {
        assertEquals(5, calculator.add(2, 3));
    }
}

在此测试类中,我们使用了 @BeforeEach 注解来初始化 Calculator 实例。@Test 注解测试了我们的 add 方法是否能够正确执行。

  1. 运行测试

在 Maven 中运行测试有两种方法:在命令行中使用 mvn test 或使用 IDE 中的测试运行器。

在命令行中输入 mvn test,你会看到以下输出信息:

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------< org.example:junit5-demo >----------
[INFO] Building junit5-demo 1.0-SNAPSHOT
[INFO] --------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ junit5-demo ---
...
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ junit5-demo ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running CalculatorTest
13:18:38.617 [main] DEBUG org.junit.platform.launcher.core.EngineDiscoveryOrchestrator - Initializing engine: junit-jupiter
13:18:38.628 [main] DEBUG org.junit.platform.launcher.core.EngineDiscoveryOrchestrator - Engine discovery finished. Details: EngineDescriptor( id = 'junit-jupiter', displayName = 'JUnit Jupiter' )
13:18:38.635 [main] INFO org.junit.jupiter.engine.execution.JupiterEngineExecutionContext - Running test method 'testAdd' with @Test()
13:18:38.635 [main] INFO org.junit.jupiter.engine.execution.JupiterEngineExecutionContext - Executing test method [testAdd] with result: success
13:18:38.636 [main] DEBUG org.junit.jupiter.engine.execution.JupiterEngineExecutionContext - Clearing execution context for test method [testAdd]
13:18:38.649 [main] INFO org.junit.jupiter.engine.execution.JupiterEngineExecutionContext - Finished executing test method [testAdd]
13:18:38.653 [main] INFO org.junit.jupiter.engine.execution.JupiterEngineExecutionContext - Finished execution of Jupiter test plan.
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.923 s - in CalculatorTest
[INFO]
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.254 s
[INFO] Finished at: 2022-01-25T13:18:39+08:00
[INFO] ------------------------------------------------------------------------

在测试完成后,也可以在生成目录 target/surefire-reports 中查看测试报告。

TestNG

TestNG 是一个测试框架,最初是为了与 JUnit 兼容但在某些方面更强大而创建的。TestNG 在 JUnit 的基础上添加了新的功能,例如测试分组、依赖性测试等。

示例说明

  1. 创建被测试类
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}
  1. 创建测试类
import org.testng.annotations.*;

import static org.testng.Assert.assertEquals;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeMethod
    public void setUp() {
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        assertEquals(calculator.add(2, 3), 5);
    }
}

注意:在 TestNG 中,测试用例需要使用 @Test 注解标注,而在 JUnit 中是 @Test

  1. 运行测试

在 Maven 中运行 TestNG 测试用例,需要添加 maven-surefire-plugin 插件,并指定 testng.xml 用例配置文件。

在 pom.xml 中添加以下插件:

<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.5.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.22.2</version>
      <configuration>
        <suiteXmlFiles>
          <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
        </suiteXmlFiles>
      </configuration>
    </plugin>
  </plugins>
</build>

src/test/resources/ 目录下创建 testng.xml 文件:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Example Suite">
  <test name="Example Test">
    <classes>
      <class name="CalculatorTest" />
    </classes>
  </test>
</suite>

最后,在命令行中输入 mvn clean test,即可运行 TestNG 测试用例。

Spock

Spock 是一种基于 Groovy 的测试框架,用于编写功能化测试和单元测试。它既支持 JUnit 接口,又提供了自己的 DSL(Junit样式的数据驱动语言)。

示例说明

  1. 创建被测试类
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}
  1. 创建测试类
import spock.lang.*

class CalculatorSpec extends Specification {
    def "test add method"() {
        given:
        Calculator calculator = new Calculator()

        when:
        int result = calculator.add(a, b)

        then:
        result == expected

        where:
        a | b | expected
        1 | 2 | 3
        3 | 4 | 7
        5 | 6 | 11
    }
}

在 Spock 中,使用 def 声明一个测试方法,其中 given 表示在测试前的准备工作,when 表示执行测试代码,then 表示期望输出的结果。

where 块中,我们可以通过添加多个数组来测试多个输入。对于每一组输入,执行 givenwhenthen 块,从而测试方法的不同输入。

  1. 运行测试

由于 Spock 基于 Groovy,因此需要配置 Groovy 插件和 Spock 框架。在 pom.xml 中添加以下插件:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmavenplus</groupId>
      <artifactId>gmavenplus-plugin</artifactId>
      <version>1.7.2</version>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>testCompile</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.spockframework</groupId>
      <artifactId>spock-maven</artifactId>
      <version>2.0-M2-groovy-3.0</version>
      <executions>
        <execution>
          <goals>
            <goal>test-compile</goal>
            <goal>compile</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

运行 mvn spock:test 命令,即可运行 Spock 测试用例。

总结

JUnit、TestNG 和 Spock 都是 Java 中常用的单元测试框架。这三个框架都可以用于测试代码的正确性,但在不同的情况下可能会有不同的优劣,因此需要根据具体情况选择合适的框架来进行测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常见的Java单元测试框架有哪些? - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • IDEA配置Maven并版本统一管理的实现

    下面就为大家详细讲解 “IDEA配置Maven并版本统一管理的实现” 的攻略。 1. 配置Maven 1.1 下载安装Maven 首先,在官网下载最新的Maven,并且按照安装提示进行安装。 1.2 配置IDEA 打开IDEA,进行如下的配置: 点击菜单栏的 File -> Settings(或直接使用快捷键 Ctrl + Alt + S )打开设置界…

    Java 2023年5月19日
    00
  • Spark Streaming编程初级实践详解

    Spark Streaming编程初级实践详解 Spark Streaming是Apache Spark的一个扩展模块,它用于处理实时数据流。在本文中,我们将介绍Spark Streaming编程的基础知识和实践。主要包括以下内容: Spark Streaming简介 Spark Streaming编程基础 实时数据处理应用示例 Spark Streamin…

    Java 2023年6月2日
    00
  • 一文搞懂JSON(JavaScript Object Notation)

    让我来为你详细讲解“一文搞懂JSON(JavaScript Object Notation)”的攻略。 概述 JSON是一种轻量级的数据交换格式,由JavaScript语言创建。它基于JavaScript的对象表示法的部分语法,但是与之不同的是,JSON可以由许多编程语言而不仅仅是JavaScript进行解析和生成。JSON格式的值可以是字符串、数值、布尔值…

    Java 2023年5月26日
    00
  • Java的抽象类 & 接口

    抽象类 如果自下而上在类的继承层次结构中上移,位于上层的类更具有通用性,甚至可能更加抽象。从某种角度看,祖先类更加通用,人们只将它作为派生其他类的基类,而不作为想使用的特定的实例类。例如,考虑一下对 Employee 类层次的扩展。一名雇员是一个人,一名学生也是一个人。下面将 Person 类和 Student 类添加到类的层次结构中。下图是这三个类之间的关…

    Java 2023年5月10日
    00
  • java Date和SimpleDateFormat时间类详解

    Java Date 和 SimpleDateFormat 时间类详解 Java Date 和 SimpleDateFormat 是 Java 日期/时间处理中最常用的类,可以方便地进行日期和时间格式化、解析和计算。本文将详细讲解 Java Date 和 SimpleDateFormat 的使用方法,包括创建 Date 对象、格式化日期和时间、解析字符串为 D…

    Java 2023年5月20日
    00
  • java多线程之线程安全的单例模式

    Java中的单例模式是指某个类只有一个实例,并提供全局访问点。在多线程的环境下,单例模式需要控制并发访问下的线程安全。下面我们来详细讲解“Java多线程之线程安全的单例模式”的完整攻略。 线程安全的单例模式 线程安全的单例模式可以通过同步方法或同步块来实现。下面是一个使用同步方法实现线程安全单例模式的示例。 public class Singleton { …

    Java 2023年5月18日
    00
  • Java中PrintWriter使用方法介绍

    Java中PrintWriter使用方法介绍 PrintWriter是Java IO包中的一个类,提供了许多用于打印输出的方法。在Java中,我们通常使用System.out来进行输出,但是PrintWriter提供了更多的选择和定制化能力。 PrintWriter的构造方法 PrintWriter有很多构造方法,其中最常见的两种为: PrintWriter…

    Java 2023年5月20日
    00
  • Java中为什么重写equals()也需要重写hashCode()?

    所有类默认继承Object类 先看一下Object源码 package java.lang; public class Object { //默认调用本地的hashcode()方法 根据内存地址生成hash值 避免不了哈希冲突 public native int hashCode(); //默认调用的equals方法比较的是’==’比较 //基本类型比较的是…

    Java 2023年4月25日
    00
合作推广
合作推广
分享本页
返回顶部