欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ant执行JUnit测试并生成报告

程序员文章站 2022-08-11 12:17:59
下面这个xml文件是我修改后能够成功运行JUnit测试并且生成测试报告的ant执行文件。先列出代码作为参考,再介绍一些我写该文件过程中遇到的问题并做一些分析,希望对后来学习者有所帮...

下面这个xml文件是我修改后能够成功运行JUnit测试并且生成测试报告的ant执行文件。先列出代码作为参考,再介绍一些我写该文件过程中遇到的问题并做一些分析,希望对后来学习者有所帮助。

[html] 
<?xml version="1.0" encoding="UTF-8"?> 
<project name="MathTest" default="test" basedir="."> 
    <property name="src" value="src"/> 
    <property name="dest" value="bin"/> 
    <property name="lib" value="lib"/> 
    <property name="report" value="report"/> 
    <path id="class.path"> 
        <fileset dir="${lib}"> 
            <include name="**/*.jar"/> 
        </fileset> 
        <pathelement path="${dest}" /> 
    </path> 
     
    <target name="init"> 
        <mkdir dir="${dest}"/> 
        <mkdir dir="${report}"/> 
    </target> 
     
    <target name="compile" depends="init"> 
        <javac srcdir="${src}" destdir="${dest}"> 
            <classpath refid="class.path" /> 
        </javac> 
    </target> 
 
    <target name="test" depends="compile"> 
         
        <junit printsummary="true" haltonfailure="no" showoutput="true"> 
            <classpath refid="class.path"> 
            </classpath> 
            <formatter type="xml" usefile="true"/> 
            <batchtest fork="yes" todir="${report}"> 
                <fileset dir="${dest}"> 
                    <include name="**/*Test.*"/> 
                </fileset> 
            </batchtest> 
        </junit> 
                 
        <junitreport todir="${report}">  
            <fileset dir="${report}">  
                <include name="TEST-*.xml"/>  
            </fileset>  
            <report format="frames" todir="${report}/html"/>  
        </junitreport>  
         
    </target> 
 
</project> 

1. 如果要引用外部的jar包,该怎么办?
测试过程中肯定会要用到外部包,如果是JUnit测试则需要JUnit的jar包,如果是selenium测试则需要selenium的包。可以将需要的包放到指定的文件夹中,然后定义path来包括里面的jar文件。在编译以及运行或者测试需要引用这些包的地方,通过定义环境变量属性classpath并引用定义的path来解决。多个jar包引用为了简单,可以用正则表达式来写。如果有一些需要引用的文件或者包在其他地方,也可以pathelement来单独指定。


2. 测试过程中的输出日志如何显示出来?

可以用junit的属性showoutput来设置


3. 如何对多个测试类执行junit测试?

可以通过正则表达式来匹配以定义所需要执行测试的文件。例如上面的代码对编译后生成的可执行文件路径下的所有名字包含*Test.*测试。这里面采用**/*Test.*可以执行dir目录下的所有符合条件的文件,包括其子目录中的。


4. 源文件及编译后的文件如果都希望以包的形式组织,这样文件分散在不同的文件夹怎么办?

只需要指定源文件和编译后的目标文件的根目录,ant会自动将源文件目录下的所有文件编译并在目标文件中以相同方式生成class文件。所以src和dest都没有必要具体指定具体的文件的详细相对位置。例如上面代码中,其实源文件在src/org/twenz下,它会自动在dest/org/twenz中生成class文件


5. junitreport在Eclipse中为什么ant后出现如下错误?

[plain] 
[junitreport] Loading stylesheet jar:file:/E:/Program%20Files/eclipse/plugins/org.apache.ant_1.8.3.v20120321-1730/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl 
[junitreport] : Error! 非 static Java 函数“replace”的第一个自变量不是有效的对象参考。 
[junitreport] : Error! 无法将数据类型“void”转换成“reference”。 
[junitreport] : Fatal Error! 无法编译样式表  www.2cto.com
[junitreport] Failed to process E:\users\zhatan\workspace\JunitTestProject\report\TESTS-TestSuites.xml 
 可以直接用命令行ant就不会有这种错误


6. 为什么junitreport命令后Test-*.xml就两行内容,生成的html文件中案例数为0?

可能是因为junit命令中没有将结果给导出来,例如上面文件中语句 <batchtest fork="yes" todir="${report}">则通过todir来将结果生成到指定目录中去。同时需要设置usefile="true"来得到相应的Test-*.xml文件。如果没有正确生成这些文件的话,之后的report出来的html文件中用例就是0了。