Java单元测试,测试环境、自动构建脚本

Java单元测试,测试环境、自动执行脚本

如何进行单元测试,如何批量执行测试用例?

WangYanCheng ([email protected]), 作者/编者, ushayden, Inc

2011年 01 月 13 日

文章内容描述了单元测试环境以及单元测试自动构建脚本

单元测试

[好处]
最早发现问题
利于软件维护
[缺点]
麻烦、增加工作量

测试环境

[工具包]
JUnit4 单元测试框架
HttpUnit 辅助进行Web单元测试
Ant1.7.1 实现自动化构建

辅助单元测试

[考虑测试资源]
数据源的绑定,像J2EE系统都会有一个Web容器,如Resin/Tomcat等,这些容器都会有自己的 java.naming.InitialContextFactory实现,可以直接使用相关Web容器的JNDI实现完成数据源的绑定。
[模块间的依赖关系]
这块可考虑扩展JUnit来实现,有篇文章就是讨论扩展JUnit主题,见 参考资料。

自动构建脚本

目录结构

Java单元测试,测试环境、自动构建脚本_第1张图片

Ant脚本  (下载文件)

<textarea cols="88" rows="15" name="code" class="xhtml">&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project default="main"&gt; &lt;tstamp&gt; &lt;format property="date" pattern="yyyy-MM-dd hh:mm:ss" locale="zh" /&gt; &lt;/tstamp&gt; &lt;property name="project" value="TestUnit" /&gt; &lt;property name="project.basedir" value="D:/work/workspace/mywork" /&gt; &lt;property name="project.build" value="${project.basedir}/build" /&gt; &lt;property name="project.build.lib" value="${project.build}/lib" /&gt; &lt;property name="project.build.tmpdir" value="${project.build}/tmp" /&gt; &lt;property name="project.build.tmpdir.confdir" value="${project.build}/tmp/WEB-INF" /&gt; &lt;property name="project.webroot" value="${project.basedir}/WebContent" /&gt; &lt;property name="project.webroot.confdir" value="${project.webroot}/WEB-INF" /&gt; &lt;property name="project.webroot.lib" value="${project.webroot.confdir}/lib" /&gt; &lt;property name="project.junit.output" value="${project.webroot}/junit" /&gt; &lt;!--global conf--&gt; &lt;path id="project.compile.lib"&gt; &lt;pathelement path="${classpath}" /&gt; &lt;fileset dir="${project.webroot.lib}"&gt; &lt;include name="**/*.jar" /&gt; &lt;/fileset&gt; &lt;/path&gt; &lt;path id="project.compile.testlib"&gt; &lt;pathelement path="${project.build.tmpdir}" /&gt; &lt;fileset dir="${project.build.lib}"&gt; &lt;include name="**/*.jar" /&gt; &lt;/fileset&gt; &lt;/path&gt; &lt;patternset id="project.junit.exclude"&gt; &lt;include name="**/*Test*" /&gt; &lt;exclude name="**/testunit/**" /&gt; &lt;exclude name="**/chart/**" /&gt; &lt;exclude name="**/workflow/**" /&gt; &lt;exclude name="**/TestAction*" /&gt; &lt;/patternset&gt; &lt;target name="init"&gt; &lt;echo&gt;Init Begin&lt;/echo&gt; &lt;mkdir dir="${project.build.tmpdir}" /&gt; &lt;mkdir dir="${project.build.tmpdir.confdir}" /&gt; &lt;mkdir dir="${project.junit.output}" /&gt; &lt;echo&gt;Init End&lt;/echo&gt; &lt;/target&gt; &lt;target name="destroy"&gt; &lt;echo&gt;Destroy Begin&lt;/echo&gt; &lt;delete dir="${project.build.tmpdir}" /&gt; &lt;delete&gt; &lt;fileset dir="${project.junit.output}"&gt; &lt;include name="TEST*.xml" /&gt; &lt;/fileset&gt; &lt;/delete&gt; &lt;echo&gt;Destroy End&lt;/echo&gt; &lt;/target&gt; &lt;target name="compileSRC"&gt; &lt;echo message="Compile SRC Begin" /&gt; &lt;javac srcdir="${project.basedir}/src" destdir="${project.build.tmpdir}"&gt; &lt;classpath refid="project.compile.lib" /&gt; &lt;/javac&gt; &lt;echo message="Compile SRC End" /&gt; &lt;/target&gt; &lt;target name="compileTEST"&gt; &lt;echo message="Compile TEST Begin" /&gt; &lt;javac srcdir="${project.basedir}/test" destdir="${project.build.tmpdir}" encoding="GBK"&gt; &lt;classpath refid="project.compile.lib" /&gt; &lt;classpath refid="project.compile.testlib" /&gt; &lt;/javac&gt; &lt;echo message="Compile TEST End" /&gt; &lt;/target&gt; &lt;target name="copyfile"&gt; &lt;echo message="BEGIN WEB-INF END" /&gt; &lt;copy todir="${project.build.tmpdir.confdir}"&gt; &lt;fileset dir="${project.webroot.confdir}"&gt; &lt;include name="*.xml" /&gt; &lt;include name="*.properties" /&gt; &lt;include name="*.log" /&gt; &lt;/fileset&gt; &lt;/copy&gt; &lt;echo message="Copy WEB-INF END" /&gt; &lt;echo message="Copy test config file BEGIN" /&gt; &lt;copy todir="${project.build.tmpdir}"&gt; &lt;fileset dir="${project.basedir}/test"&gt; &lt;include name="**/*.properties" /&gt; &lt;/fileset&gt; &lt;/copy&gt; &lt;echo message="Copy test config file END" /&gt; &lt;/target&gt; &lt;target name="testunit"&gt; &lt;echo message="Running TestCase Begin" /&gt; &lt;junit printsummary="on" fork="true" showoutput="true"&gt; &lt;classpath refid="project.compile.lib" /&gt; &lt;classpath refid="project.compile.testlib" /&gt; &lt;formatter type="xml" /&gt; &lt;batchtest todir="${project.junit.output}"&gt; &lt;fileset dir="${project.build.tmpdir}"&gt; &lt;patternset refid="project.junit.exclude" /&gt; &lt;/fileset&gt; &lt;/batchtest&gt; &lt;/junit&gt; &lt;echo message="Running TestCase End" /&gt; &lt;/target&gt; &lt;target name="report" depends="testunit"&gt; &lt;echo message="Report Begin" /&gt; &lt;junitreport todir="${project.junit.output}"&gt; &lt;fileset dir="${project.junit.output}"&gt; &lt;include name="TEST-*.xml" /&gt; &lt;/fileset&gt; &lt;report todir="${project.junit.output}" format="frames" /&gt; &lt;/junitreport&gt; &lt;echo message="Report End" /&gt; &lt;/target&gt; &lt;target name="openFile"&gt; &lt;taskdef name="browseURL" classname="com.hd.testunit.AntOpenCommand"&gt; &lt;classpath path="${classpath}" /&gt; &lt;classpath location="${project.build.tmpdir}" /&gt; &lt;/taskdef&gt; &lt;browseURL fileUrl="${project.junit.output}/index.html" /&gt; &lt;/target&gt; &lt;target name="compile" depends="compileSRC, compileTEST"&gt; &lt;echo message="Compile successful." /&gt; &lt;antcall target="copyfile" /&gt; &lt;/target&gt; &lt;target name="main" depends="init,compile,report,openFile,destroy"&gt; &lt;echo&gt; date:${date} &lt;/echo&gt; &lt;/target&gt; &lt;/project&gt;</textarea> 



回页首

资源

  • 扩展 JUnit4 以促进测试驱动开发。
  • 下载脚本文件

你可能感兴趣的:(java,单元测试,JUnit,report,测试,include)