一、Junit任务的属性及功能
1. Printsummary属性
用于指定是否每个测试用例测试测试完成时都输出一行统计信息。可取值on,off(默认),和withOutAndErr。
- off:代表不输出,是默认选项。
- on:代表每个测试用例打印一行统计信息。
- withOutAndErr:相当于on但可以同时指定输出方式,可选择System.out或System.err。
2. Fork属性
用于指定一个特定的JVM,然后使用这个指定的JVM执行JUnit测试。默认为off,即不指定而是使用当前的JVM。
3. ForkMode属性
在指定了fork属性的前提下使用,用于指定开启JVM的方式。可取值perTest(默认),once和perBath。
- once:所有测试用例只开启一个JVM。
- perTest:每一个测试用例开启一个JVM。
- perBatch:为每一个<batchtest>元素开启一个JVM。
4. Haltonerror属性
用于指定当前出现错误时是否停止整个构建过程。可取值on和off,默认为off不停止。
5. Failureproperty属性
用于指定一个property元素,当出现错误时会报错误代码写到这个指定的属性中。
6. Failtertrace属性
用于从错误堆栈中过滤出Ant和Junit的错误信息,默认为on开启。
7. Timeout属性
用于指定一个时间(时间的单位为毫秒),如果在这段时间内构件没有完成,将会停止所有的构建工作。默认时不指定。
8. Maxmemory属性
用于指定分配多少内存给fork指定的JVM。如果fork属性没有指定,则这个属性不能使用。
9. Jvm属性
用于指定调用JVM时所执行的命令,默认为Java命令。这个指定的命令由java.lang.Runtime.exec()进行解释。只有fork属性被指定时才能使用。
10. Dir属性
用于指定调用JVM的目录,这个属性要在指定了fork属性后才能使用。
11. Newenvironment属性
用于指定当使用了新的环境变量后,旧的环境变量是否还能继续传递使用。默认为false,代表不能继续使用。只有fork属性被指定时才能使用这个属性。
12. Includeantruntime属性
用于指定把Ant类库和运行的JUnit的类库放到classpath中。默认为true。
13. Showoutput属性
用于指定把执行JUnit测试时输出的信息转到Ant的日志系统中,在日志输出的过程中可以使用formatter进行格式化。
14. Tempdir属性
用于指定一个存放临时文件的地方。
15. Reloading属性
用于指定是否为每个JUnit测试重新初始化一个classLoader(类加载器)。默认为true。
二、嵌套使用Ant类型
2.1 classpath类型
用于指定类库。例如:
<junit fork="no">
...
<classpath>
<pathelement location="lib/junit.jar"/>
</classpath>
...
</junit>
2.2 propertyset类型
可以同时引用多个系统属性。例如:
<junit fork="no">
...
<propertyset id="properties-starting-with-foo">
<propertyref prefix="foo"/>
</propertyset>
...
</junit>
2.3 assertions类型
assertions类型用于指定某个包内或某个具体的类能不能使用断言,这个类型只有class和packages这两个属性,用于指定具体的类的位置和包路径。
<junit fork="no">
...
<assertions enableSystemAssertions="true">
<enable package="org.apache"/>
<disable package="org.apache.tools.ant"/>
<enable class="org.apache.tools.ant.Main"/>
</assertions>
...
</junit>
2.4 formatter类型
用于格式化测试输出的结果。
- Type属性:用于指定一个预定义的格式化类型,例如xml、plain或brief。
- Classname属性:用于指定具体的格式化类的位置。Classname和Type属性必须指定其一。
- Extension属性:当通过Classname指定格式类时,可以使用这个属性来指定输出文件的位置。
- Usefile属性:用于指定是否使用输出文件,取值为true或false。默认为true。
- If属性:用于指定只有设定了名称属性才进行格式化。默认为true。
- Unless属性:与If属性相反,只有在没有设定名称属性时才进行格式化。
使用plain简单文本格式进行格式化:
<junit printsummary="yes" fork="yes" haltonfailure="yes">
...
<formatter type="plain"/>
...
</junit>
2.5 test类型
test类型用于指定对一个具体的测试用例进行测试。
- Name属性:用于指定要测试的用例的名称,需要指定全路径。
- Fork属性:用于指定运行的JVM,用于覆盖JUnit任务中的Fork属性设定。
- Haltonerror属性:用于指定当出错时是否停止构件,可用于覆盖JUnit任务中的设定。
- Errorproperty属性:用于指定一个记录错误代码的属性元素,可用于覆盖JUnit任务中的相关设定。
- Haltonfilure属性:用于指定当测试失败时,停止整个构建过程。可用于覆盖JUnit任务中的相关设定。
- Failureproperty属性:用于指定一个属性元素,当测试失败时用于记录失败的代码输出。可用于覆盖Junit任务中的相关设定。
- Filtertrace属性:指定一个过滤器,在错误或失败时过滤出Ant和JUnit的错误堆栈。可用于覆盖JUnit任务中的相关设定。
- Todir属性:指定输出测试报告的位置(目录)。
- Outfile属性:用于设定输出文件的名称。
- If属性:用于指定当名称属性被设定时才执行测试。
- Unless属性:与If属性相反,只有在未设定名称属性时才进行测试。
在test类型中可以嵌套formatter类型,用于定义测试结果的输出格式,test类型的通常使用方式如下:
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<formatter type="plain"/>
<test name="org.antbook.TestCase"/>
</junit>
2.6 batchtest类型
用于定义一组测试,具有与test类型类似的属性。
在batchtest类型中可以使用FileSet类型指定需要包含的测试用例的集合,同时也可以指定formatter类型。示例:
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<formatter type="plain"/>
<batchtest fork="yes" todir="${reports.tests}">
<fileset dir="${src.tests}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>
三、JUnitReport任务的属性及功能
JUnitReport任务用于整合JUnit测试生成的测试结果,从而生成测试报表。
JUnitReport任务具有以下属性可供设定:
- Tofile属性:用于指定一个xml文件的名称,这个文件将整合JUnit测试生成的xml结果文件。默认名称为TESTS-TestSuites.xml。
- Todir属性:用于指定存放生成的报表文件的位置,默认为当前目录。
在JUnitReport任务中可以嵌套FilSet类型,用于指定测试结果文件(xml文件);也可以嵌套report类型,report类型可以根据JUnitReport生成的测试报告,生成一个可以浏览的报告文件(html文件)。
- format属性:指定生成可浏览的html报表的格式,可取值noframes和frames(html中的框架),默认为frames。
- Styledir属性:用于指定xsl文件的位置。有两种形式,即frames格式与noframes格式;当为frames格式时xsl文件的名称必须为junit-frames.xsl;当为noframes格式时xsl文件的名称必须为junit-noframes.xsl。
- Todir属性:用于指定生成的可浏览报表文件的位置。
JunitReport任务通常的使用方式如下:
<junitreport todir="./reports">
<fileset dir="./reports">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="./reprot/html"/>
</junitreport>
四、Ant与Junit的集成使用实例
示例将实现通过Ant工具自动对JUnit3LibraryTest.java和JUnit4LibraryTest.java这两个测试用例进行测试,同时生成结果的xml文件和html的报表。
示例源代码的地址:http://download.csdn.net/detail/fanxiaobin577328725/9711347
构件文件(build.xml):
<?xml version="1.0" encoding="UTF-8"?>
<project name="JUnitTest" default="init">
<property name="junitJar" value="lib/junit-4.1.jar"/>
<target name="init">
<mkdir dir="report"/>
<mkdir dir="htmlreport"/>
</target>
<target name="compile" >
<javac destdir="src" srcdir="src" includeantruntime="on">
<classpath>
<pathelement location="${junitJar}"/>
</classpath>
</javac>
</target>
<target name="run" depends="compile">
<echo message="start run junit test" />
<junit>
<classpath>
<pathelement location="src"/>
<pathelement location="${junitJar}"/>
</classpath>
<formatter type="xml"/>
<batchtest haltonfailure="no" todir="report">
<fileset dir="src">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="./htmlreport">
<fileset dir="./report">
<include name="TEST-*.xml"/>
</fileset>
<report format="noframes" todir="./htmlreport"/>
</junitreport>
<echo message="end running junit test" />
</target>
</project>
这里build.xml文件将生成.xml文件格式的结果。进入build.xml构件文件所在的目录,执行ant init run命令,在我的电脑上运行如图:
C:\Users\fxb\Desktop\ceshi>ant init run
Buildfile: C:\Users\fxb\Desktop\ceshi\build.xml
init:
[mkdir] Created dir: C:\Users\fxb\Desktop\ceshi\report
[mkdir] Created dir: C:\Users\fxb\Desktop\ceshi\htmlreport
compile:
[javac] Compiling 6 source files to C:\Users\fxb\Desktop\ceshi\src
run:
[echo] start run junit test
[junitreport] Processing C:\Users\fxb\Desktop\ceshi\htmlreport\TESTS-TestSuites.
xml to C:\Users\fxb\Desktop\ceshi\htmlreport\junit-noframes.html
[junitreport] Loading stylesheet jar:file:/E:/Develop%20Software/Apache/ant197/l
ib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-noframe
s.xsl
[junitreport] Transform time: 716ms
[echo] end running junit test
BUILD SUCCESSFUL
Total time: 2 seconds
在执行构建命令后,在当前目录会生成report和htmlreport两个目录。在report目录下有两个测试结果的xml文件,TEST-junit.test.JUnit3LibraryTest.xml和TEST-junit.test.JUnit4LibraryTest.xml。这两个文件详细地列出了测试结果。在htmlreport目录下也有两个文件,一个是TESTS-TestSuites.xml文件,这个文件整合了report目录下的所有测试结果:另一个是junit-noframes.html文件,这个文件时html格式的报表。通过junit-noframes.html报表可以查看所有测试结果,报表内容如图所示: