【软件工具】运行java单元测试需要在pom里面添加的插件和依赖有哪些

一、确认Maven Surefire Plugin的配置

你的Jenkinsfile片段看起来已经能够执行单元测试并生成JaCoCo覆盖率报告。然而,有几点需要确认和调整,以确保它按预期工作:

1. 确认Maven Surefire Plugin的配置

确保你已经配置了Maven Surefire Plugin,它负责运行单元测试。如果未配置,它可能会导致测试未执行。通常,Maven Surefire Plugin会自动包含在Maven项目中,但你可以在pom.xml中明确配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
        </plugin>
    </plugins>
</build>

2. 检查jacoco execPattern路径

确保execPattern路径正确,通常生成的*.exec文件在target目录下。如果你的路径结构有所不同,请调整execPattern以匹配实际路径。

3. 确保所有文件存在

在执行JaCoCo步骤时,确保所有必要的文件存在,包括.exec文件、classes文件和source文件。如果某些文件不存在,JaCoCo可能无法正确生成报告。

4. 执行权限

你运行的脚本使用了sh命令来执行Maven命令,这在Linux环境下是有效的。如果你在Windows环境下运行Jenkins,可能需要将sh替换为bat

5. 可能需要在Pipeline中添加tools配置

确保你的Pipeline配置了Maven工具。例如:

tools {
    maven 'Maven 3.6.3' // 确保Jenkins正确配置了Maven
}

6. 运行单元测试

这段脚本已经包括了运行单元测试的步骤,只要Maven项目结构和pom.xml配置正确,单元测试会在mvn verify阶段执行。

7. 调整阈值

如果你不需要特别严格的覆盖率阈值,或希望更灵活的构建行为,可以调整jacoco的阈值。例如,如果不希望在达不到最大覆盖率时构建失败,可以将maximumXCoverage的值设置得更宽松一些。

经过以上确认和调整,这段Jenkinsfile配置应该能顺利运行单元测试,并生成覆盖率报告。

二、添加JaCoCo依赖

JaCoCo 是一个广泛使用的Java代码覆盖率工具,可以帮助你测量哪些部分的代码被测试覆盖到。下面是如何使用JaCoCo进行代码覆盖率测试的详细步骤。

1. 添加JaCoCo依赖

如果你使用Maven,可以在pom.xml中添加JaCoCo插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.10</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

如果使用Gradle,可以在build.gradle中添加JaCoCo插件:

plugins {
    id 'java'
    id 'jacoco'
}

jacoco {
    toolVersion = "0.8.10"
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    dependsOn test
    reports {
        xml.enabled true
        csv.enabled false
        html.enabled true
        html.destination file("${buildDir}/jacocoHtml")
    }
}

2. 运行测试生成覆盖率报告

Maven

执行以下命令来运行测试并生成JaCoCo报告:

mvn clean test
mvn jacoco:report

JaCoCo报告通常生成在target/site/jacoco/index.html。你可以通过浏览器打开这个HTML文件来查看详细的覆盖率信息。

Gradle

执行以下命令来运行测试并生成JaCoCo报告:

gradle clean test jacocoTestReport

生成的报告位于build/reports/jacoco/test/html/index.html,你可以通过浏览器打开这个文件查看覆盖率报告。

3. 查看报告

生成的HTML报告会显示代码的覆盖率信息,包括:

  • 行覆盖率:多少行代码被执行过。
  • 分支覆盖率:条件分支(如if-else)被覆盖的比例。
  • 方法覆盖率:多少方法被调用过。

4. 配置覆盖率阈值

你可以配置最低的代码覆盖率阈值来确保代码质量。例如,要求某些百分比的行或分支覆盖率:

Maven
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.10</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>BUNDLE</element>
                        <limits>
                            <limit>
                                <counter>LINE</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.80</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>
Gradle
jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = 0.80
            }
        }
    }
}

check.dependsOn jacocoTestCoverageVerification

这会强制代码覆盖率低于80%时构建失败。

5. 在Jenkins中集成JaCoCo

在Jenkins中集成JaCoCo很简单,首先你需要安装JaCoCo插件:

  1. 在Jenkins中,转到Manage Jenkins -> Manage Plugins,搜索并安装JaCoCo Plugin
  2. 在你的项目的构建配置中,添加构建后操作Record JaCoCo coverage report
  3. 配置你的报告路径,例如target/site/jacoco/jacoco.xml
  4. 你可以设置覆盖率阈值,Jenkins会在每次构建后显示覆盖率结果,并且如果覆盖率低于设定的阈值,构建会标记为不成功。

通过这些步骤,你可以在Java项目中有效地使用JaCoCo来测量和提高代码覆盖率。

三、添加JUnit依赖

在Java中进行单元测试通常使用JUnit,这是最常用的单元测试框架。下面是一个简单的步骤指南,帮助你在Java中编写和执行单元测试:

1. 添加JUnit依赖

如果你使用Maven作为构建工具,可以在pom.xml中添加JUnit的依赖:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

如果使用Gradle,可以在build.gradle中添加:

dependencies {
    testImplementation 'junit:junit:4.13.2'
}

2. 创建测试类

在你的项目中,创建一个新的测试类。这个类通常与被测试的类放在同一包下,但在src/test/java目录中。例如,如果你有一个Calculator类,你可以创建一个CalculatorTest类来测试它。

import org.junit.Test;
import static org.junit.Assert.*;

public class CalculatorTest {

    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }

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

3. 运行测试

你可以通过以下方式运行你的测试:

  • IDE: 大多数IDE(如 IntelliJ IDEA、Eclipse)都支持直接在测试类或方法上右键点击运行测试。
  • Maven: 运行mvn test命令来执行所有测试。
  • Gradle: 运行gradle test命令来执行所有测试。

4. 查看测试结果

运行测试后,你可以查看测试结果。测试通过的结果会显示为绿色,失败的结果会显示为红色,并给出错误信息以帮助你调试。

5. 提高测试覆盖率

使用测试覆盖率工具如JaCoCo,来查看测试的代码覆盖率,以确保你的测试尽可能覆盖到更多的代码路径。

通过这些步骤,你可以在Java项目中有效地进行单元测试,并确保你的代码质量。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值