常见的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日

相关文章

  • springMVC的生命周期详解

    Spring MVC的生命周期详解 Spring MVC是什么 Spring MVC 是构建于 Spring Framework 之上的一个与 Servlet API 无关的 Web 框架。相比于传统的 Servlet,使用 Spring MVC 可以更快地开发 Web 应用程序,它也更加灵活、可扩展和可配置。 Spring MVC的生命周期 Spring …

    Java 2023年5月16日
    00
  • SpringMVC视图转发重定向区别及控制器详解

    Spring MVC是一种常用的Web框架,它提供了一种方便的方式来处理HTTP请求和响应。在Spring MVC中,我们可以使用视图转发和重定向来控制页面的跳转。本文将详细讲解“SpringMVC视图转发重定向区别及控制器详解”的完整攻略,并提供两个示例说明。 视图转发 视图转发是指将请求转发到另一个页面,而不是直接返回响应。在Spring MVC中,我们…

    Java 2023年5月18日
    00
  • 详解Maven JAR包冲突问题排查及解决方案

    首先我们需要了解”Maven JAR包冲突问题”的概念及常见原因。在Maven项目开发中,常常会出现不同版本的同一依赖包引入,导致编译、构建或运行时出现各种奇怪的问题,这就是”Maven JAR包冲突问题”。常见原因包括: 不同依赖模块引入了同一依赖包不同版本。 同一依赖模块引入了不同版本的同一依赖包。 以下是解决”Maven JAR包冲突问题”的四个步骤:…

    Java 2023年5月20日
    00
  • tomcat 5.0 + apache 2.0 完全安装步骤详解

    安装 Tomcat 5.0 + Apache 2.0 的完整攻略 介绍 在安装 Tomcat 5.0 和 Apache 2.0 前,请确保您的服务器已安装了 Java JDK。这篇攻略将介绍如何将 Tomcat 5.0 和 Apache 2.0 安装在 Windows 环境下,同时也指导配置这两个服务器。 步骤 步骤1:下载 Tomcat 5.0 和 Apa…

    Java 2023年5月19日
    00
  • 30条Java代码编写经验分享

    30条Java代码编写经验分享 本文提供30条Java代码编写经验分享,涵盖了Java编程中的许多方面,包括变量、模块化、异常处理、性能优化、安全性等方面,旨在帮助读者提高Java编程技能,避免常见的错误和陷阱。下面对这些经验进行详细解释。 1. 变量和数据类型 1.1 千万不要在循环体内定义变量。循环体内定义的变量会在每次循环迭代时重新创建和销毁,会严重降…

    Java 2023年5月23日
    00
  • MyBatis-Plus通过version机制实现乐观锁的思路

    “MyBatis-Plus通过version机制实现乐观锁的思路”的完整攻略如下: 1. 什么是乐观锁 在数据库的并发访问中,当多个事务同时访问同一条数据时,容易出现脏读、不可重复读、幻读等问题,这些问题统称为并发访问的问题。为了解决这些问题,数据库提供了锁机制,其中乐观锁和悲观锁是两种常见的锁机制。乐观锁相较于悲观锁而言,乐观锁更为适用于高并发的场景,它利…

    Java 2023年5月20日
    00
  • Java实现在线预览的示例代码(openOffice实现)

    Java实现在线预览是许多Web应用程序开发中常用的技术之一。本文将讲解如何使用openOffice实现在线预览Java文档的方法。 前置条件 在开始本文之前,请确保您已经满足以下条件: 安装openOffice软件并启动该服务。 安装Java开发环境(JDK) 如果您使用的是Maven和Spring,您需要安装这些工具 实现步骤 导入依赖 如果您正在使用M…

    Java 2023年5月18日
    00
  • 分析讲解SpringMVC注解配置如何实现

    下面是分析讲解SpringMVC注解配置如何实现的完整攻略: 一、SpringMVC注解配置的基本原理 SpringMVC注解配置是指使用注解的方式对SpringMVC进行配置。通过注解的方式,我们可以更加方便、简洁地进行配置,同时也可以大大降低代码量。SpringMVC注解配置的基本原理如下: 1.在SpringMVC的配置文件中,添加注解驱动配置: &l…

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