建立一个最简单的项目,实践cobertura在maven中应用

本文介绍使用Cobertura和JUnit进行代码覆盖率测试的过程。通过具体案例,展示如何配置Maven项目并实施测试,以确保代码质量。

cobertura是测试java代码中代码覆盖率的自动化工具

我以前未接触过这个东西,以为直接测试就可以了,但经过试验和阅读文档,明白了,必须经过测试,也就是必须配合xUnit测试才能产生出覆盖率结果,否则结果都是零。下面讲解我做的例子:

目录结构:

 src

 ------main

 -------------HelloWorld.java 

 -------------Calculator.java

-------test

--------------CalculatorTest.java

-------pom.xml

//CalculatorTest.java为jUnit框架Calculator.java对应的测试类,HelloWorld.java没有测试类,最后生成结果会发现HelloWorld的覆盖率为0

HelloWorld.java:

public class HelloWorld
{
public static void main(String args[ ])
{
System.out.println("HelloWorld!");
}
}
Calculator.java

package andycpp;
public class Calculator{
    private static int result; // 静态变量,用于存储运行结果
    public void add(int n){
	result = result + n;
	}
	public void substract(int n){
	result = result - 1; //Bug: 正确的应该是 result =result-n
	}
	public void multiply(int n){
	} // 此方法尚未写好
	public void divide(int n){
	result = result / n;
	}
	public void square(int n){
	result = n * n;
	}

	public void squareRoot(int n) {
	for (; ;) ; //Bug : 死循环
	}

	public void clear() { // 将结果清零
	result = 0;
	}
	public int getResult(){
	return result;
	}
}

CalculatorTest.java

import static org.junit.Assert.*;
	import org.junit.Before;
	import org.junit.Ignore;
	import org.junit.Test;
public class CalculatorTest {
	private static Calculator calculator = new Calculator();
	@Before
	public void setUp() throws Exception {
	calculator.clear();
	}
	@Test
	public void testAdd() {
	calculator.add(2);
	calculator.add(3);
	assertEquals(5, calculator.getResult());
	}
	@Test
	public void testSubstract() {
	calculator.add(10);
	calculator.substract(2);
	assertEquals(8, calculator.getResult());
	}
	@Ignore("Multiply() Not yet implemented")
	@Test
	public void testMultiply() {
	}
	@Test
	public void testDivide() {
	calculator.add(8);
	calculator.divide(2);
	assertEquals(4, calculator.getResult());
	}
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.xxxcom.helloworld</groupId>
  <artifactId>helloworld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <url>${HUDSON_URL}</url>

    <build>
	    <sourceDirectory>src/main</sourceDirectory>  
        <testSourceDirectory>src/test</testSourceDirectory>  
        <outputDirectory>target/classes</outputDirectory>  
        <testOutputDirectory>target/test-classes</testOutputDirectory>
        <plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.12</version>
			</plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
					<check>
						<branchRate>85</branchRate>
						<lineRate>85</lineRate>
						<haltOnFailure>true</haltOnFailure>
						<totalBranchRate>85</totalBranchRate>
						<totalLineRate>85</totalLineRate>
						<packageLineRate>85</packageLineRate>
						<packageBranchRate>85</packageBranchRate>
				    </check>
                </configuration>
            </plugin>
        </plugins>
    </build>
	<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit-dep</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
	
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <formats>
            <format>xml</format>
            <format>html</format>
          </formats>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  
</project>



说明:

1.


	    <sourceDirectory>src/main</sourceDirectory>  
        <testSourceDirectory>src/test</testSourceDirectory>  
        <outputDirectory>target/classes</outputDirectory>  
        <testOutputDirectory>target/test-classes</testOutputDirectory>
这些定义环境
2. maven-surefire-plugin执行Junit测试
3. cobertura-maven-plugin的check标签网上抄的,没明白什么意思,目前


4. <dependencies>中定义了junit
5. <reporting>中指明生成报告的工具cobertura



                
### 使用 Cobertura 进行 Maven 项目的代码覆盖率分析 Cobertura 是一种开源的代码覆盖率工具,适用于 Java 项目[^1]。它能够覆盖几乎所有的代码覆盖率标准,并且可以轻松集成到 Maven 构建流程中。 以下是关于如何在 Maven 项目中配置和使用 Cobertura 插件来执行代码覆盖率分析的具体方法: #### 配置 `pom.xml` 文件 为了启用 Cobertura,在项目的 `pom.xml` 中添加以下依赖项和插件声明: ```xml <build> <plugins> <!-- 添加 Cobertura 插件 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.7</version> <!-- 版本号可以根据需求调整 --> <configuration> <formats> <format>html</format> <!-- 输出 HTML 报告 --> <format>xml</format> <!-- 可选 XML 格式的报告 --> </formats> </configuration> </plugin> </plugins> </build> ``` 上述配置会引入 CoberturaMaven 插件并设置其版本为 2.7。同时指定了两种输出格式:HTML 和 XML。 #### 执行代码覆盖率分析 完成配置后,可以通过运行以下命令启动 Cobertura 并生成覆盖率报告: ```bash mvn clean cobertura:cobertura ``` 此命令将清理旧数据、编译源码以及测试用例,并最终生成一份详细的覆盖率报告。默认情况下,这些报告会被存储在目标目录下的 `site/cobertura/` 路径下。 #### 结合 jUnit 测试框架 由于 jUnit 是 Java 单元测试的标准工具[^4],因此通常会在同一个项目中一起使用它们。确保已正确设置了 jUnit 测试类路径,则无需额外操作即可让 Cobertura 自动检测由 jUnit 提供的结果。 --- ### 注意事项 虽然 Cobertura 功能强大,但它仅限于支持 Java 开发环境中的应用。如果需要更复杂的多技术栈测试方案,请参阅其他文档说明[^2]。 此外,对于 Jenkins 用户而言,可能还需要安装 Git 客户端插件或其他辅助组件以便更好地管理远程仓库资源[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值