一本不错电子资料:http://download.csdn.net/source/2624478
JUnit简介
如果您要对撰写的程序进行测试,该如何进行呢?传统的测试方式通常依赖于人工对输出结果的判断,缺少效率且通常难以组织,且针对单一程序通常要设计专门的测试程序,如果您是在撰写Java,您可以使用JUnit来为您提供有效率的测试。
JUnit是一个开放原始码的Java测试框架(testing framwork),它用来撰写与执行重复性的测试,它是用于单元测试框架的xUnit架构的实例。
JUnit包括以下的特性:
1. 对预期结果的断言
2. 对相同共享数据的测试装备
3. 易于组织与执行测试的测试套件
4. 图型与文字接口的测试器
JUnit最初是由Erich Gamma与Kent Beck撰写
在Eclipse中JUnit应用
一般使用JUnit是需要jar包的,而MyEclipse中是自带
图解 :http://zph999.blog.hexun.com/15108859_d.html
举例
使用Assert类别中所提供的assertXXX()方法可以让您进行各种断言,如果断言失败,则可能传回AssertionFailedError或ComparisonFailure对象,您可以利用try....catch区块收集并显示这些对象所夹带的讯息,然后重新返回测试,然而事实上您不用自行设计,JUnit提供TestCase类别,您可以继承这个类别进行测试案例的撰写,并使用它的run()方法进行测试,TestCase对象会自行帮您收集测试失败时的相关讯息,之后您只要取得TestResult对象,就可以显示相关的讯息。
被测程序
- public class Student {
- private String _number;
- private String _name;
- private int _score;
- public Student() {
- _number = null;
- _name = null;
- _score = 0;
- }
- public Student(String num, String name, int score) {
- _number = num;
- _name = name;
- _score = score;
- }
- public String getNumber() {
- return _number;
- }
- public String getName() {
- return _name;
- }
- public int getScore() {
- return _score;
- }
- public void setNumber(String num) {
- _number = num;
- }
- public void setName(String name) {
- _name = name;
- }
- public void setScore(int score) {
- _score = score;
- }
- }
测试程序
- import junit.framework.*;
- public class TestIt extends TestCase {
- public TestIt(String name) {
- super(name);
- }
- public void testGetMethod() {
- Student student = new Student("B83503124", "Justin", 100);
- assertEquals("B83503124", student.getNumber());
- assertEquals("Justin", student.getName());
- assertEquals(100, student.getScore());
- }
- public void testSetMethod() {
- Student student = new Student();
- student.setNumber("B83503124");
- student.setName("Justin");
- student.setScore(100);
- assertEquals("B83503124", student.getNumber());
- assertEquals("Justin", student.getName());
- assertEquals(10, student.getScore());
- }
- }
运行结果:
参考资料:
http://zph999.blog.hexun.com/15108859_d.html
junit和ant
http://www.ibm.com/developerworks/cn/java/j-ant/
Ant简介
Ant的全名是"Another Neat Tool",是由James Duncan Davidson在Make工具无法满足他的需求下所撰写出来的构建(build)工具,目前由Apache Software Foundation持续进行开发。
根据官方网站上的FAQ中"What is Apache Ant"的回答:
Ant是以Java为基础的构建工具,理论上,它有些类似Make,但没有Make的缺点,并具有纯Java撰写的可移植性优点.(Ant is a Java-based build tool. In theory, it is kind of like Make, without Make's wrinkles and with the full portability of pure Java code.)
Ant作用
对于没有使用过Make工具的初学者来说,想象一下您如何管理您的原始码?自动处理ClassPath的问题?在编译之后将编译过后的档案指定至某个目录?包装您的类库?甚至执行自动测试并将报告储存下来?这一切都可以透过Ant来完成!您不用不断的使用javac、copy、cd、java指令来达成这些目的,只要撰写好构建文件(buildfile),一个以XML组织的文件档案,之后,最简单的情况下,您只要下达ant指令,所有的一切就可以完成。
或许有人会说这些东西有些IDE也可以办到,这并不是正确的说法,Ant并不取代IDE,它补强了IDE,而也没有IDE可以取代Ant,他们是互补的,不是相互取代的。
简单的归纳一下Ant可以帮您自动完成的任务:
*编译Java原始码
*建立jar、war、zip档案
*自动测试与生成报告
*从CVS等管理系统取得原始码
例子:HelloWorld
开发工具:MyEclipse8.5
具体的步骤:
1. 新建一个工程,工程的具体结构如下
2. Main中的代码
- package com.taobao.main;
- public class Main {
- public static void main(String[] args){
- System.out.println("Hello World");
- }
- }
3. MyEclipse自动生成Ant Build.xml
选择你要生成Build.xml文件的项目,右键. Export-> General -> Ant Buildfiles .点Next,再点Finish.生成完毕.这时工程中会出现build.xml文件
4. 修改Build.xml中的内容
删除Build.xml中的所有内容,更改如下:
- <project name="example" default="compile">
- <property name="src.dir" location="src"/>
- <property name="build.dir" location="build"/>
- <property name="backup.dir" location="bak"/>
- <target name="prepare">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${backup.dir}"/>
- <copy todir="${backup.dir}">
- <fileset dir="${build.dir}"/>
- </copy>
- </target>
- <target name="compile" depends="prepare">
- <javac srcdir="${src.dir}" destdir="${build.dir}"/>
- </target>
- </project>
5. 运行这个Build.xml
右键——run as —— Ant Build
控制台输出信息:
6. 最后的结果
参考资料
Ant的官方网站:http://ant.apache.org/
Ant使用者手册:http://ant.apache.org/manual/index.html
ant简介:http://52347.javaeye.com/blog/695802
MyEclipse自动生成Ant Build.xmlhttp://blog.sina.com.cn/s/blog_4d001c830100f8ki.html
Ant入门教程:http://hi.baidu.com/fendy520/blog/item/574c20a8501df7b9cb130c92.html
之前的两篇《Junit和Ant入门》文章都是分开介绍两样工具的使用,这篇文章开始讲解如何将两项工具混合起来使用,如果是初学者,建议先看之前的两篇文章《Junit和Ant入门(1) JUnit》 和 《Junit和Ant入门(2) Ant 》 。由于整个配置还是挺麻烦的,所以更需要我们循序渐进。
为了让大家能更好地明白,我也是用例子讲解。同时也把自己遇到的问题,写出来。
具体步骤
1. 导入Junit的jar包
下载地址:http://download.csdn.net/source/2636855
说明:虽然MyEclipse中是自带有JUnit的jar包的,但由于在使用Ant进行编译测试时需要用到JUnit的jar包,为防止冲突,我们导入自己需要Jar包
具体的步骤:
1)在工程中新建一个文件夹jars,将Junit的jar包拷贝到jars文件夹下
2)右键工程——build path——add external archives ——选择在jars文件下的Junit的jar包
2. 编写代码
具体的工程结构
源代码:
Main.java
- package com.taobao.zhujiadun.code;
- public class Main {
- private String name = "";
- public Main(String _name){
- name = _name;
- }
- public String info(){
- return name;
- }
- }
MainTest.java
- package com.taobao.zhujiadun.test;
- import com.taobao.zhujiadun.code.Main;
- import junit.framework.TestCase;
- public class MainTest extends TestCase{
- public void testMain(){
- Main m = new Main("zhujiadun");
- assertEquals("zhujiadun",m.info());
- }
- }
3. 配置ant Build.xml文件
右键. Export-> General -> Ant Buildfiles .点Next... 生成build.xml
4. Build.xml
- <?xml version="1.0"?>
- <project name="testAnt" default="test">
- <!-- properies -->
- <property name="src.dir" value="src" />
- <property name="classes.dir" value="class" />
- <property name="lib.dir" value="jars" />
- <property name="dist.dir" value="dist" />
- <property name="doc.dir" value="doc" />
- <property name="junit-report" value="junit-report" />
- <property name="cover-report" value="cover-report" />
- <!-- 定义classpath,由于我涉及到单元测试的jar包了,所以我需要将包导进来 -->
- <path id="master-classpath">
- <fileset file="${lib.dir}/*.jar" />
- <pathelement path="${classes.dir}"/>
- </path>
- <!-- 初始化任务 -->
- <target name="init">
- </target>
- <!-- 编译 -->
- <target name="compile" depends="init" description="compile the source files">
- <mkdir dir="${classes.dir}"/>
- <javac srcdir="${src.dir}" destdir="${classes.dir}" >
- <!--设置了一个classpath,这点对于要使用到其他jar包的很重要-->
- <classpath refid="master-classpath"/>
- </javac>
- </target>
- <!-- 测试 -->
- <target name="test" depends="compile" description="run junit test">
- <mkdir dir="${junit-report}"/>
- <junit printsummary="yes" >
- <classpath refid="master-classpath" />
- <formatter type="plain"/>
- <batchtest todir="${junit-report}">
- <fileset dir="${src.dir}">
- <include name="**/*Test.java"/>
- </fileset>
- <formatter type="xml"/>
- </batchtest>
- </junit>
- <junitreport todir="${junit-report}">
- <fileset dir="${junit-report}">
- <include name="TEST-*.xml"/>
- </fileset>
- <!-- 带有框架,可以用noframes选不带框架 -->
- <report format="noframes" todir="${junit-report}"/>
- </junitreport>
- </target>
- </project>
5. 运行结果
控制台输出信息:
具体工程:
注意红色圈圈内的部分