zoukankan      html  css  js  c++  java
  • Ant编译与执行Junit测试

    Apache Ant简介

    简单的讲,Ant是一个命令行工具,可以用来编译java文件,执行java程序,生成jar文件,执行测试等。

    具体参见http://ant.apache.org/

    1.Ant的配置

    (1)下载Ant

    http://ant.apache.org/bindownload.cgi

    下载解压后放在某路径下,例如:C:apache-ant-1.8.2

    (2)配置环境变量

    追加系统环境变量:“ANT_HOME”,值:“C:apache-ant-1.8.2”

    在系统环境变量“Path”里追加“C:apache-ant-1.8.2in”

    (3)验证配置是否正确

    在命令行输入“ant -version”

    如果显示“Apache Ant(TM) version 1.8.2 compiled on December 20 2010”,说明正确

    2.创建build.xml文件

    用XML编写,至少包含一个project和一个target.

    以下面这个build.xml为例说明

    主要任务:

    (1)正式source文件(src目录下)和Junit测试(test目录下)文件可以分别编译。

    (2)生成jar文件,并且不包含测试文件。

    (3)通过ant执行Junit测试,生成测试报告。

    编写思路:

    (1)根据上述任务,至少需要编写4个target

    target1:compile,编译正式source文件

    target2:testcomplile,编译test文件

    target3:make-jar,生成jar文件

    target4:runtests,执行junit测试

    (2)辅助target

    target5:JUNIT,执行Junit测试需要此target支持

    target6:apidocs,生成javaDoc

    target7:rmi-compile,编译RMI相关文件(工程中涉及到了RMI通信内容)。

    特别说明:test目录下的测试文件与src的source文件是一一对应的,包结构完全一致。

    主要目录结构

    myproject
    ├─bin
    ├─config
    ├─image
    ├─lib
    ├─log
    ├─src
    │ └─AAA
    │ └─BBB
    │ └─CCC
    └─test
    └─AAA
    └─BBB
    └─CCC

    ----------------------------------------file start-------------------------------------------

    <?xml version="1.0" encoding="Shift_JIS"?>

    <!-- project tag
    name :工程名字
    default:默认执行的target
    basedir:ant执行的根目录-->
    <project name="myproject" default="runtests" basedir=".">
    <!-- source路径 -->
    <property name="src.dir" value="src" />

    <!-- 编译后class路径 -->
    <property name="build.dir" value="classes" />

    <!-- JavaDoc路径 -->
    <property name="build.apidocs" value="${build.dir}/doc" />

    <!-- 测试source路径
    test.dir : JUnit执行路径
    -->
    <property name="testSrc.dir" value="test" />

    <!-- test报告路径 -->
    <property name="reports.dir" value="./doc/report" />

    <!-- test结果统计路径 -->
    <property name="correctreports.dir" value="${reports.dir}/html" />

    <!-- target tag
    name :target名字
    depends :依赖target,先执行被依赖的target.
    description:target描述
    -->
    <target name="JUNIT">
    <available property="junit.present" classname="junit.framework.TestCase" />
    </target>

    <target name="compile" depends="JUNIT">
    <mkdir dir="${build.dir}"/>
    <depend srcdir="${src.dir}" destdir="${build.classes}"/>
    <javac srcdir="${src.dir}" destdir="${build.classes}">
    <classpath>
    <pathelement path="${build.classes}"/>
    <pathelement path="${java.class.path}/"/>
    </classpath>
    <include name="**/*.java"/>
    </javac>
    </target>


    <target name="testcompile" depends="compile">
    <depend srcdir="${testSrc.dir}" destdir="${build.classes}"/>

    <!-- test class文件与正式class文件,输出到同一目录下

    也就是说正式source和测试source的原文件(java文件)不同目录,但编译后的class文件同目录。

    -->
    <javac srcdir="${testSrc.dir}" destdir="${build.classes}" fork="true" memoryMaximumSize="512m">
    <compilerarg value="-Xlint:unchecked"/>
    <classpath>
    <pathelement path="${build.classes}"/>
    <pathelement path="${java.class.path}/"/>
    <fileset dir="lib">
    <include name="*.jar"/>
    </fileset>
    </classpath>
    <include name="**/*.java"/>
    </javac>
    </target>


    <target name="rmi-compile" depends="compile">
    <rmic base="${build.classes}" verify="true">
    <classpath>
    <pathelement path="${build.classes}"/>
    <pathelement path="${java.class.path}/"/>
    </classpath>
    <include name="**/*.class"/>
    <exclude name="**/test/*.class"/>
    </rmic>
    </target>

    <target name="runtests" depends="testcompile">
    <delete>
    <fileset dir="${reports.dir}" includes="**/*" />
    </delete>
    <mkdir dir="${reports.dir}"/>

    <junit printsummary="on" failureProperty="fail">
    <classpath>
    <pathelement location="lib/***.jar" />
    <pathelement location="lib/***.jar" />
    <pathelement path="${build.classes}"/>
    <pathelement path="${java.class.path}/"/>
    </classpath>

    <formatter type="xml"/>

    <batchtest fork="yes" todir="${reports.dir}">
    <fileset dir="${src.dir}">
    <!-- 只执行test CLASS -->
    <include name="${test.dir}**/*Test.java" />
    </fileset>
    </batchtest>
    </junit>

    <junitreport todir="${reports.dir}">
    <fileset dir="${reports.dir}">
    <include name="TEST-*.xml"/>
    </fileset>

    <report format="frames" todir="${correctreports.dir}"/>
    </junitreport>
    </target>

    <!-- JavaDoc生成 -->
    <target name="apidocs" depends="compile" description="JavaDoc生成">
    <javadoc sourcepath="${src.dir}" destdir="${build.apidocs}"
    packagenames="AAA.BBB.CCC.*"
    author="true"
    version="true"
    notree="true"
    nonavbar="true"
    noindex="true"
    windowtitle="MyProject API"
    doctitle="Regulation"
    public="true"
    />
    </target>

    <!-- Jar生成 -->
    <target name="make-jar" depends="rmi-compile" description="Jar生成">
    <delete file="myproject.jar"/>
    <jar jarfile="myproject.jar" manifest="MANIFEST.MF">
    <fileset dir="classes">

    <!--除去test文件-->
    <exclude name="**/test/"/>
    </fileset>
    </jar>
    </target>
    </project>

    --------------------------------------file end----------------------------------------------

    3.执行build.xml

    将build.xml放到myproject工程的根目录下。

    控制台切换到myproject工程的根目录“C:myproject”:

    (1)编译正式source

    C:myproject>ant compile

    (2)编译测试文件

    C:myproject>ant testcompile

    (3)生成jar文件,并且不包含测试文件。

    C:myproject>ant make-jar

    (4)通过ant执行Junit测试,生成测试报告。

    C:myproject>ant runtest

  • 相关阅读:
    领会一些比较巧妙的算法
    操作系统os常识
    C++中的继承与虚函数各种概念
    我学shell程序的记录
    matlab:linux环境中将m文件编译成动态链接库
    struct内存对齐:gcc与VC的差别
    fedora中丢失或损坏fstab,无法启动,如何补救
    判断一个字符串中的字符是否都在另一个中出现
    linux下的不错的小软件:apvlv,zathura和vifm
    C语言中将结构体写入文件
  • 原文地址:https://www.cnblogs.com/mickeygirl/p/3267729.html
Copyright © 2011-2022 走看看