`
tooby
  • 浏览: 117498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ANT task之Junit、JunitReport

 
阅读更多

一、ANT任务之Junit:

  学习ANT其实主要是学习ANT的task,ANT众多task中有一个Testing Tasks,它下面有两个任务:Junit和JunitReport,主要用来进行单元测试及生成单元测试报告。

Testing Tasks 
Task Name Description
Junit

Runs tests from the Junit testing framework. This task has been tested with JUnit 3.0 up to JUnit 3.7; it won't work with versions prior to JUnit 3.0.

JunitReport

Merges the individual XML files generated by the Junit task and applies a stylesheet on the resulting merged document to provide a browsable report of the testcases results.

 官方网址:http://ant.apache.org/manual/index.html  

<junit>下面可以包含其它元素,例如:

  1、<test>:运行单个TestCase

  2、<batchtest>:运行多个TestCase

  3、<formatter>:定义测试结果输出格式

 还有很多,详细可以参考官方文档。

 

二、项目实例:

由于ant安装比较得简单,网上一搜一大把且现在ecplise基本都带ant,所以本文并未说明如何搭建ant环境。

另外,在eclipse中可以通过:window->show view 来调出Ant视图

1、目录结构如下:

 

2、SimpleCalculation类代码如下:

复制代码
1 package com.glen.he;
2 
3 public class SimpleCalculation {
4     public int Add(int a,int b){        
5         return (a+b);        
6     }
7 
8 }
复制代码

 

3、测试类SimpleCalculationTest代码如下:

复制代码
 1 package com.glen.he;
 2 
 3 import com.glen.he.SimpleCalculation;
 4 
 5 import static org.junit.Assert.*;
 6 import org.junit.Test;
 7 
 8 public class SimpleCalculationTest {
 9 
10     SimpleCalculation sc = new SimpleCalculation();
11     
12     @Test
13     public void AddTest() {
14         
15         int c = sc.Add(3, 5);    
16         
17         assertEquals(8, c);        
18     }
19 }
复制代码

 

4、在项目要目录下添加build.xml(执行一个测试)文件,内容如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project name="AntDemo" default="junit" basedir=".">
 3     <!-- =================================================================== -->
 4     <!-- 变量设置  -->
 5     <!-- =================================================================== -->
 6 
 7     <!-- 源代码src路径 -->
 8     <property name="src.path" value="src/java"/>
 9     <!-- 编译文件class路径 -->
10     <property name="build.path" value="build"/>
11     <!-- 单元测试代码路径 -->
12     <property name="test.path" value="src/test"/>
13     <!-- lib包路径 -->
14     <property name="lib.path" value="lib"/>         
15         
16     <!-- =================================================================== -->
17     <!-- 设置classpath -->
18     <!-- =================================================================== -->
19     <path id="compile.path">        
20         <fileset dir="${lib.path}">
21             <include name="**/*.jar"/>
22         </fileset>
23         
24         <pathelement path="${build.path}"/>
25     </path>     
26 
27     <!-- =================================================================== -->
28     <!-- 清除历史编译class -->
29     <!-- =================================================================== -->
30     <target name="clean" description="clean">
31         <delete dir="${build.path}"/>
32     </target>
33 
34     <!-- =================================================================== -->
35     <!-- 编译测试文件,初始化目录 -->
36     <!-- =================================================================== -->
37     <target name="compile" description="compile">
38         <mkdir dir="${build.path}"/>                        
39         <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path"/>
40         <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path"/>
41     </target>      
42          
43     <!-- =================================================================== -->
44     <!-- 执行测试案例 -->
45     <!-- =================================================================== -->
46     <target name="junit" depends="clean,compile">
47         <junit printsummary="true">
48              <classpath refid="compile.path"/>                  
49                       
50              <test name="com.glen.he.SimpleCalculationTest"/>
51          </junit>
52      </target>
53 
54 </project>
复制代码

说明: 

<junit printsummary="true">
  <classpath refid="compile.path"/> 
  <test name="com.glen.he.SimpleCalculationTest"/>
</junit>

 

<path id="compile.path"> 
  <fileset dir="${lib.path}">
    <include name="**/*.jar"/>
  </fileset>
  <pathelement path="${build.path}"/>
</path

我们在<junit〉任务下,使用了编译后的.class文件的目录,还有编译所需的jar包所在的目录。 因为,JUnit任务实际就是为我们运行Test类,而不仅仅是像我们发布Ant文件那样只是javac编译,只需要编译所需的Jar包。我们还需要像java任务那样运.class文件,所以必须包括编译后的.class文件。

 

5、然后把build.xml文件拖到Ant视图中,如下图,双击junit执行即可。

 

6、执行结果:

复制代码
 1 Buildfile: D:\AntTest\build.xml
 2 clean:
 3    [delete] Deleting directory D:\AntTest\build
 4 compile:
 5     [mkdir] Created dir: D:\AntTest\build  
 6     [javac] Compiling 1 source file to D:\AntTest\build
 7    
 8     [javac] Compiling 1 source file to D:\AntTest\build
 9 junit:
10     [junit] Running com.glen.he.SimpleCalculationTest
11     [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.016 sec
12 BUILD SUCCESSFUL
13 Total time: 1 second
复制代码

 

三、增强版build.xml

  通过上面第二步,基本可以达到使用ant和junit来进行单元测试,但还远远不够,比如需要批量运行案例,生成报告等,下面会介绍这些内容

 

1、使用formatter属性输出junit信息:

  • 修改build.xml文件,增加第16,49,51,57,58,59行代码
  • 修改build.xml文件,修改53行代码,增加了todir属性,指定xml的输出路径。
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project name="AntDemo" default="junit" basedir=".">
 3     <!-- =================================================================== -->
 4     <!-- 变量设置  -->
 5     <!-- =================================================================== -->
 6 
 7     <!-- 源代码src路径 -->
 8     <property name="src.path" value="src/java"/>
 9     <!-- 编译文件class路径 -->
10     <property name="build.path" value="build"/>
11     <!-- 单元测试代码路径 -->
12     <property name="test.path" value="src/test"/>
13     <!-- lib包路径 -->
14     <property name="lib.path" value="lib"/>
15     <!-- 生成报告junit4.xml路径 -->
16     <property name="report.path" value="report"/>
17         
18     <!-- =================================================================== -->
19     <!-- 设置classpath -->
20     <!-- =================================================================== -->
21     <path id="compile.path">        
22         <fileset dir="${lib.path}">
23             <include name="**/*.jar"/>
24         </fileset>
25         
26         <pathelement path="${build.path}"/>
27     </path>     
28 
29     <!-- =================================================================== -->
30     <!-- 清除历史编译class -->
31     <!-- =================================================================== -->
32     <target name="clean" description="clean">
33         <delete dir="${build.path}"/>
34     </target>
35 
36     <!-- =================================================================== -->
37     <!-- 编译测试文件,初始化目录 -->
38     <!-- =================================================================== -->
39     <target name="compile" description="compile">
40         <mkdir dir="${build.path}"/>                        
41         <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path"/>
42         <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path"/>
43     </target>      
44          
45     <!-- =================================================================== -->
46     <!-- 执行测试案例 -->
47     <!-- =================================================================== -->
48     <target name="junit" depends="clean,compile">
49         <mkdir dir="${report.path}"/>        
50         <junit printsummary="true" fork="true">        
51              <formatter type="xml" usefile="true"/>            
52              <classpath refid="compile.path"/>                                  
53              <test name="com.glen.he.SimpleCalculationTest" todir="${report.path}" fork="true"/>
54          </junit>
55      </target>
56 
57     <target name="delete">
58         <delete dir="${report.path}"/>
59     </target>
60     
61 </project>
复制代码

执行junit的task后,在项目report目录下生成了一个名为TEST-com.glen.he.SimpleCalculationTest.xml的xml文件。

另外:

<formatter type="xml" usefile="true"/>中type属性值还有plain、brief

这时会输出一个文本文件,提供测试失败时的详细内容以及每个测试的运行统计。

 

 2、批量运行单元测试案例:

  •  修改build.xml文件,把步骤7中的第53行代码替换成下面的58~62行代码;
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project name="AntDemo" default="junit" basedir=".">
 3     <!-- =================================================================== -->
 4     <!-- 变量设置  -->
 5     <!-- =================================================================== -->
 6 
 7     <!-- 源代码src路径 -->
 8     <property name="src.path" value="src/java"/>
 9     <!-- 编译文件class路径 -->
10     <property name="build.path" value="build"/>
11     <!-- 单元测试代码路径 -->
12     <property name="test.path" value="src/test"/>
13     <!-- lib包路径 -->
14     <property name="lib.path" value="lib"/>
15     <!-- 生成报告junit4.xml路径 -->
16     <property name="report.path" value="report"/>
17         
18     <!-- =================================================================== -->
19     <!-- 设置classpath -->
20     <!-- =================================================================== -->
21     <path id="compile.path">        
22         <fileset dir="${lib.path}">
23             <include name="**/*.jar"/>
24         </fileset>
25         
26         <pathelement path="${build.path}"/>
27     </path>     
28 
29     <target name="init">
30         <mkdir dir="${build.path}"/>
31         <mkdir dir="${report.path}"/>
32     </target>
33     
34     <!-- =================================================================== -->
35     <!-- 清除历史编译class -->
36     <!-- =================================================================== -->
37     <target name="clean" description="clean">
38         <delete dir="${build.path}"/>
39     </target>
40 
41     <!-- =================================================================== -->
42     <!-- 编译测试文件,初始化目录 -->
43     <!-- =================================================================== -->
44     <target name="compile" depends="init" description="compile">
45         <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path"/>
46         <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path"/>
47     </target>      
48          
49     <!-- =================================================================== -->
50     <!-- 执行测试案例 -->
51     <!-- =================================================================== -->
52     <target name="junit" depends="compile">                
53         <junit printsummary="true" fork="true">        
54              <formatter type="xml" usefile="true"/>        
55             
56              <classpath refid="compile.path"/>        
57             
58             <batchtest fork="on" todir="${report.path}" haltonfailure="no">
59                 <fileset dir="${build.path}">
60                     <include name="**/*Test.class"/>
61                 </fileset>
62             </batchtest>            
63              
64          </junit>
65 
66      </target>
67 
68     <!-- 清除Junit生成的报表文档 -->
69     <target name="delete">
70         <delete dir="${report.path}"/>
71     </target>
72     
73 </project>
复制代码

 

 3、使用<JunitReport>生成测试报告:

  在上面我们已经知道,通过formatter(type=“xml”)输出junit信息时会在指定目录下生成一个Test-类路径名.xml的xml文件,但是这个xml文件看起来很不方便。Ant提供了<junitreport>任务使用XSLT将xml文件转换为HTML报告,该任务首先将生成的XML文件整合成单一的XML文件,然后再对他进行转换,这个整合的文件默认情况下被命名为:TESTS-TestSuites.xml.

  • 修改上面的build.xml文件,增加65~71行,如下:
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project name="AntDemo" default="junit" basedir=".">
 3     <!-- =================================================================== -->
 4     <!-- 变量设置  -->
 5     <!-- =================================================================== -->
 6 
 7     <!-- 源代码src路径 -->
 8     <property name="src.path" value="src/java"/>
 9     <!-- 编译文件class路径 -->
10     <property name="build.path" value="build"/>
11     <!-- 单元测试代码路径 -->
12     <property name="test.path" value="src/test"/>
13     <!-- lib包路径 -->
14     <property name="lib.path" value="lib"/>
15     <!-- 生成报告junit4.xml路径 -->
16     <property name="report.path" value="report"/>
17         
18     <!-- =================================================================== -->
19     <!-- 设置classpath -->
20     <!-- =================================================================== -->
21     <path id="compile.path">        
22         <fileset dir="${lib.path}">
23             <include name="**/*.jar"/>
24         </fileset>
25         
26         <pathelement path="${build.path}"/>
27     </path>     
28 
29     <target name="init">
30         <mkdir dir="${build.path}"/>
31         <mkdir dir="${report.path}"/>
32     </target>
33     
34     <!-- =================================================================== -->
35     <!-- 清除历史编译class -->
36     <!-- =================================================================== -->
37     <target name="clean" description="clean">
38         <delete dir="${build.path}"/>
39     </target>
40 
41     <!-- =================================================================== -->
42     <!-- 编译测试文件,初始化目录 -->
43     <!-- =================================================================== -->
44     <target name="compile" depends="init" description="compile">
45         <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path"/>
46         <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path"/>
47     </target>      
48          
49     <!-- =================================================================== -->
50     <!-- 执行测试案例 -->
51     <!-- =================================================================== -->
52     <target name="junit" depends="compile">                
53         <junit printsummary="true" fork="true">        
54              <formatter type="xml" usefile="true"/>        
55             
56              <classpath refid="compile.path"/>        
57             
58             <batchtest fork="on" todir="${report.path}" haltonfailure="no">
59                 <fileset dir="${build.path}">
60                     <include name="**/*Test.class"/>
61                 </fileset>
62             </batchtest>                 
63          </junit>
64         
65         <!-- 产生单元测试报表文档 -->
66         <junitreport todir="${report.path}">
67             <fileset dir="${report.path}">
68                 <include name="TEST-*.xml" />
69             </fileset>
70             <report format="frames" todir="${report.path}" />
71         </junitreport>
72 
73      </target>
74 
75     <!-- 清除Junit生成的报表文档 -->
76     <target name="delete">
77         <delete dir="${report.path}"/>
78     </target>
79     
80 </project>
复制代码

执行后会在指定目录下生成报告文档,打开index.html可以很方便的看到执行的结果。

 1、如下图所示(我又补充了3个案例,并且故意让两个案例失败),显示执行的统计结果:

 

2、点击classes下面的ComplexCalculationTest,可以看到具体某个类里面的单元测试案例执行统计情况以及失败案例的错误信息提示。

 

 

OVER!

分享到:
评论

相关推荐

    ANT&JUNIT中文手册

    《ANT&JUNIT中文手册》是一份集合了Apache Ant和JUnit两种重要Java开发工具的中文教程,旨在帮助Java开发者更高效地理解和运用这两个工具。Ant是Apache软件基金会的一个项目,是一个基于Java的构建工具,而JUnit则是...

    JUnit Ant Eclipse, JUnitReport报告

    标题 "JUnit Ant Eclipse, JUnitReport报告" 涉及到的是Java开发中的自动化测试技术,主要涵盖三个核心工具:JUnit、Ant和Eclipse。这些工具在软件开发过程中起到关键作用,确保代码质量并提高开发效率。 JUnit 是...

    eclipse下利用ant、junit进行自动化测试例子源码

    本示例主要展示了如何在Eclipse集成开发环境中利用ANT构建工具和JUnit单元测试框架进行自动化测试。以下是关于这些知识点的详细说明: 1. **Eclipse IDE**:Eclipse是一款流行的开源Java开发环境,支持多种语言的...

    ant-junit-1.6.5.jar.zip

    《Ant与JUnit结合:深入解析ant-junit-1.6.5.jar.zip》 在Java开发领域,Ant和JUnit是两个不可或缺的工具。Ant是一种基于Java的构建工具,用于自动化项目构建过程,如编译、打包、测试等任务。JUnit则是Java编程...

    ant脚本运行junit测试用例

    通过ant对各种语言脚本做运行管理,并输出报告!

    ant+junit教程

    在Java开发过程中,Ant和JUnit是两个非常重要的工具。Ant是一个构建工具,它允许开发者自动化构建、测试和部署Java项目,而JUnit则是一个单元测试框架,用于编写和运行可重复的测试用例,确保代码质量。这个“ant+...

    ant-junit4.jar.zip

    《Ant与JUnit4结合使用详解》 在Java开发过程中,自动化构建工具Ant和单元测试框架JUnit4是不可或缺的两个部分。Ant-junit4.jar.zip是一个包含Ant和JUnit4相关依赖的压缩包,它使得开发者能够方便地在Ant构建环境中...

    ant-junit-1.7.0.jar.zip

    《Ant与JUnit结合:ant-junit-1.7.0.jar.zip详解》 在软件开发过程中,测试是不可或缺的一环,而JUnit作为Java语言中最常用的单元测试框架,为开发者提供了便利。同样,Apache Ant作为一款强大的构建工具,帮助...

    Junit+ant+cobertura示例

    JUnit是Java编程语言中最常用的单元测试框架之一。它允许开发者编写可重复运行的测试用例,以确保代码的正确性。JUnit提供断言方法来验证预期的结果,以及注解来标记测试方法,如@Test。此外,JUnit支持异常测试、...

    ant1.8.2+junit4.8.1整合项目

    ant1.8.2+junit4.8.1 自动编译,自动测试,自动生成测试报告 只要把你下载的zip包解压,cmd到对应目录下,直接ant命令就可以。当然前提是你要配置好ANT_HOME, 并把ant命令加到Path中。 zip包中,有build文件夹,有...

    ant-junit-1.6.1.jar.zip

    《Ant与JUnit结合:ant-junit-1.6.1.jar.zip详解》 在软件开发过程中,测试是不可或缺的一环,而JUnit作为Java语言中最常用的单元测试框架,为开发者提供了便利。同样,Apache Ant作为自动化构建工具,对于项目管理...

    Ant与Junit结合

    标题“Ant与JUnit结合”指的是在Java开发中如何利用Apache Ant构建工具与JUnit测试框架进行集成,以便自动化地运行单元测试。Apache Ant是一种基于XML的构建工具,它替代了传统的Makefile,为Java项目提供了构建、...

    JUnit与Ant教程

    JUnit与Ant教程JUnit与Ant教程JUnit与Ant教程JUnit与Ant教程JUnit与Ant教程

    7_ant_junit和ant的整合(非常重要)

    在IT行业中,Ant和JUnit是两个非常重要的工具,它们分别用于构建管理和自动化测试。这篇讨论将专注于如何将JUnit集成到Ant构建系统中,以便在Java项目中实现高效的自动化测试。 Ant是一个由Apache软件基金会开发的...

    Maven2.Ant.Junit合集

    《Maven2.Ant.Junit合集》是一个包含多种IT工具和框架的资源包,主要聚焦于Java开发中的构建管理和单元测试。这个合集提供了PDF和CHM两种格式的文档,便于不同用户根据个人喜好进行阅读。以下是这些工具及其重要知识...

    ant-junit-1.9.2-sources.jar

    标签:ant-junit-1.9.2-sources.jar,ant,junit,1.9.2,sources,jar包下载,依赖包

    ant-junit.jar

    ant-junit.jar

Global site tag (gtag.js) - Google Analytics