覆盖测试-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类也没有算到里面。