温馨提示×

Ubuntu Java如何测试代码

小樊
38
2025-10-05 19:35:20
栏目: 编程语言

1. 准备测试环境
在Ubuntu上进行Java测试前,需确保已安装JDK(推荐OpenJDK 11及以上)和构建工具(如Maven或Gradle)。通过以下命令安装:

sudo apt update
sudo apt install openjdk-11-jdk maven  # 安装OpenJDK 11和Maven

验证安装:

java -version  # 检查JDK版本
mvn -version   # 检查Maven版本

设置JAVA_HOME环境变量(可选但推荐):编辑~/.bashrc文件,添加:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

运行source ~/.bashrc使配置生效。

2. 创建Java项目结构
使用Maven创建标准Java项目(推荐):

mvn archetype:generate -DgroupId=com.example -DartifactId=my-java-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

进入项目目录:

cd my-java-app

项目结构需符合Maven规范:

my-java-app/
├── src/
│   ├── main/java/com/example/    # 主代码目录
│   └── test/java/com/example/    # 测试代码目录(自动生成)
├── pom.xml                       # Maven配置文件

3. 添加测试框架依赖(以JUnit 5为例)
编辑pom.xml文件,在<dependencies>标签内添加JUnit 5依赖(JUnit Jupiter包含API和引擎):

<dependencies>
    <!-- JUnit 5核心依赖 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.9.3</version>  <!-- 使用最新稳定版 -->
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.9.3</version>
        <scope>test</scope>
    </dependency>
</dependencies>

保存后运行mvn install下载依赖。

4. 编写单元测试类
src/test/java/com/example/目录下创建测试类(如CalculatorTest.java),命名规则为被测试类名+Test。示例如下:

package com.example;

import org.junit.jupiter.api.Test;  // JUnit 5测试注解
import static org.junit.jupiter.api.Assertions.assertEquals;  // 断言工具

public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();  // 被测试类实例
        int result = calculator.add(2, 3);         // 调用被测试方法
        assertEquals(5, result, "2+3应等于5");     // 断言结果是否符合预期
    }

    @Test
    public void testSubtract() {
        Calculator calculator = new Calculator();
        int result = calculator.subtract(5, 2);
        assertEquals(3, result, "5-2应等于3");
    }
}

其中,@Test注解标记测试方法,assertEquals用于验证结果是否符合预期(第三个参数为失败时的提示信息)。

5. 运行测试
使用Maven命令运行测试(在项目根目录下执行):

mvn test

Maven会自动编译代码并执行src/test/java目录下的所有测试类。测试结果会输出到控制台,示例如下:

[INFO] Running com.example.CalculatorTest
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s
[INFO] 
[INFO] BUILD SUCCESS

若测试失败,控制台会显示详细的失败信息(如断言错误的具体原因),帮助快速定位问题。

6. 查看测试报告
Maven会自动生成HTML格式的测试报告,位于target/surefire-reports目录下。打开index.html文件,即可查看测试结果的可视化报告(包括通过的测试用例、失败的测试用例及详细信息)。

7. 扩展:使用IDE运行测试(以IntelliJ IDEA为例)
若使用IntelliJ IDEA,可直接通过界面运行测试:

  • 打开项目后,找到src/test/java目录下的测试类(如CalculatorTest.java)。
  • 右键点击测试类或测试方法,选择“Run ‘CalculatorTest’”(运行测试)。
  • IDE会显示测试结果的弹窗,绿色表示全部通过,红色表示有失败。

8. 进阶:性能测试(使用JMH)
若需进行性能测试(如测试方法的执行时间),可使用JMH(Java Microbenchmark Harness)。步骤如下:

  • 添加JMH依赖到pom.xml
<dependencies>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>1.37</version>
    </dependency>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>1.37</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
  • 编写性能测试类(如LinkedListBenchmark.java):
package com.example;

import org.openjdk.jmh.annotations.*;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@State(Scope.Benchmark)  // 标记为基准测试类
@OutputTimeUnit(TimeUnit.MICROSECONDS)  // 输出时间单位为微秒
public class LinkedListBenchmark {
    private List<Integer> list;

    @Setup  // 初始化数据
    public void setup() {
        list = new LinkedList<>();
        for (int i = 0; i < 10000; i++) {
            list.add(i);
        }
    }

    @Benchmark  // 标记为基准测试方法
    public void forLoopIteration() {
        for (int i = 0; i < list.size(); i++) {
            list.get(i);
        }
    }

    @Benchmark
    public void forEachIteration() {
        list.forEach(item -> {});
    }
}
  • 运行性能测试:
mvn clean install  # 编译项目
java -jar target/benchmarks.jar  # 执行基准测试

JMH会输出每个测试方法的执行时间、吞吐量等性能指标。

0