首页 > 代码库 > java-覆盖测试

java-覆盖测试

覆盖测试-cobertura

  本文不是详细介绍cobertura的文章,只是笼统上说一下覆盖测试。

  从三个方面来说:

  1:cobertura是一款覆盖测试的框架并且是开源框架,并且依赖于单元测试例如junit。

  2:进行覆盖测试的时间段是在单元测试完成后进行(如果连单元测试都是有问题的或者是不全面,不完整的。进行覆盖测试根本没有意义)。

  3:进行覆盖测试的意义,能够测试代码是否有效正确(语句测试)。同时能够检测你的单元测试是否进行了测试了所有可能的case。同时也能够测试代码部分是否全部有效(分支测试)。

  书写单元测试按照规范来写,尽量每一个分支写一个case这样能使出错的时候更加明显。并且expected ,actual单独用变量表示。junit选用了4,因为junit4完全兼容junit3,所以在进行单元测试的时候最好选用junit4进行测试。 

  以下部分为简单的覆盖测试例子。

  maven  pom文件

<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.zhang</groupId>    <artifactId>testjunit</artifactId>    <version>0.0.1-SNAPSHOT</version>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.8.2</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.codehaus.mojo</groupId>                <artifactId>cobertura-maven-plugin</artifactId>                 <version>2.5.1</version>                  <configuration>                    <instrumentation>                        <!--<ignore>.*</ignore> -->                        <!--用来排除测试类,以MOdel结尾的类不算在要进行覆盖测试的类里面-->                        <excludes>                            <exclude>**/*Model.class</exclude>                        </excludes>                    </instrumentation>                </configuration>            </plugin>        </plugins>    </build></project>

Maven Cobertura Plugin集成详见  http://blog.csdn.net/kongxx/article/details/7757571

主类

 1 package com.zhang.testjunit; 2  3 /** 4  * @author act 5  * 6  * 7  */ 8 public class MyJunit { 9 10     public int myDivide(int x,int y){11         if(0==y){12             System.out.println("重新输入y");13             return -1;14         }else if(0==x){15             return x/y;16         }else {17             return x/y;18         }19     }20 }

测试类

package com.zhang.testjunit;import junit.framework.TestCase;/** * @author act * * */public class MyJunitTest extends TestCase{    public void testMyDivide(){        MyJunit mj = new MyJunit();        int actual = mj.myDivide(6, 2);        int expected = 3;        assertEquals(expected, actual);    }    public  void testMyDivide1(){        MyJunit mj = new MyJunit();        int actual = mj.myDivide(6, 0);        int expected = -1;        assertEquals(expected, actual);    }}

生成测试报告

正好符合测试报告,测试类中有一个分支没有进行测试,并且model类也没有算到里面。