代码改变世界

8月31培训日记

2006-08-31 21:35  java ee spring  阅读(199)  评论(0编辑  收藏  举报

 受梁老师委托,简要给大家回顾了一些工作流系统中的对象之间的关系,工作流就象一个链表。
为什么要测试?什么是单元测试?单元测试的好处?为什么要使用自动化工具进行单元测试。
什么是XP,什么是TDD,TDD的好处。
junit的安装和使用,再次回顾junit.jar为什么不能放在<jre>/lib/ext目录中的原因。
利用TestCase编写单元测试程序,资源的初试化和回收方法为setUp和tearDown,各个测试方法要遵守testXxx()这种命名模式,junit使用反射机制调用测试程序的方法,每个方法前后都要调用setUp和tearDown。如何使用TestSuite进行组合测试,junit自带的例子中的每个程序都返回一个Testsuite的目的是为了让每个程序也可以被作为一个分支组合被测试。
Test接口,TestCase类,TestSuite类之间的关系,组合设计模式在junit中的体现。
各种assert方法的总结:assertTrue,assertFalse,assertSame,assertNotSame,assertNull,assertNotNull,assertEquals,fail
重点分析:assertEquals方法比较浮点数时为什么有一个delta变量,fail方法的作用
junit报告的Error与Failure的区别
每一个执行流程都应对应一个测试用例
编写一个空方法的“最佳实践”是什么?
运行时异常(RuntimeException,也叫unchecked异常)的特点,考题:请列举出3个你熟悉的运行时异常。
测试程序与源程序的组织结构,“分离但等同”原则。

junit.jar加入到classpath中,可以被javac任务找到,但不能java任务识别。

junit与ant构建工具的集成

如果junit任务下面没有设置<formatter>子元素,那将无法打印出详细的信息。
一个junit任务下可以有多个<formatter>子元素,<formatter>的usefile属性决定是否生成文件。
junitreport任务首先把多个test-....xml文件合并成一个汇总的xml文件,其todir属性指定该文件的存储目录.其<report>子元素用于指定生成的html文件的目录。在用junitreport之前,要小心junit的haltonfaiure。

batchtest指定的java源文件或class文件,而不是要运行的测试类名称,junit从这些文件中找出要运行的测试类名。

最后复习了一下反射与代理
实践:对入学测试题的第一题进行单元测试。
FindChar.java:
pacakge cn.itcast;

public class FindChar
{
 int search(char [] chars, char ch) throws IllegalArgumentException
 {
  //throw new UnsupportedOperationException("search");
  /*if(chars == null)
  {
   throw new IllegalArgumentException("");
  }*/
  
  /*for(int i=0; i<chars.length; i++)
  {
   if(chars[i] == ch)
   {
    return i;
   }
  }*/
  return -1;
 }
}
------------------------------------------
TestFindChar.java:

package cn.itcast;
import junit.framework.*;

public class TestFindChar extends TestCase
{
 private FindChar fc = null;
 private char [] chars = {'a','b','c','d'};
 
 public void setUp()
 {
  fc = new FindChar();
 }
 
 public void testSearchFound()
 {
  int index = fc.search(chars,'c');
  assertEquals(index,2);
 }
 public void testSearchNotFound()
 {
  int index = fc.search(chars,'e');
  assertTrue((index==-1));
 }
 public void testSearchIllegalArguments()
 {
  char [] chs = null;
  fc.search(chs,'a');
  fail();
 }
}
---------------------------------------------------
build.xml文件:
<project name="junitlesson" default="report">
 <property name="src.java.dir" value="src/java" />
 <property name="src.test.dir" value="src/test" />
 <property name="classes.java.dir" value="classes/java" />
 <property name="classes.test.dir" value="classes/test" />
 
 <target name="init">
  <mkdir dir="${classes.java.dir}" />
  <mkdir dir="${classes.test.dir}" />
 </target>
  
 <target name="compileJava" depends="init">
  <javac srcdir="${src.java.dir}/cn/itcast" destdir="${classes.java.dir}"/>
 </target>
 
 <target name="compileTest" depends="init">
  <javac srcdir="${src.test.dir}/cn/itcast" destdir="${classes.test.dir}">
   <classpath>
    <pathelement location="${classes.java.dir}" />
   </classpath>
  </javac>
 </target>
 
 <target name="compile" depends="compileJava,compileTest" />
  
 <!--target name="run" depends="clean,compile">
  <java classname="junit.swingui.TestRunner" fork="true">
   <classpath>
    <pathelement location="C:/junit3.8.1/junit.jar" />
    <pathelement location="${classes.test.dir}" />
    <pathelement location="${classes.java.dir}" />
   </classpath>
   <arg value="cn.itcast.TestFindChar" />
  </java>
 </target-->
 <target name="test" depends="clean,compile">
  <mkdir dir="reports"/>
  <!--haltonfailure="yes"-->
  <junit fork="true" printsummary="on" >
   <classpath>
    <pathelement location="C:/junit3.8.1/junit.jar" />
    <pathelement location="${classes.test.dir}" />
    <pathelement location="${classes.java.dir}" />
   </classpath>
   <!--test name="cn.itcast.TestFindChar" todir="reports"/-->
   <batchtest fork="yes" todir="reports">
    <fileset dir="${src.test.dir}">
     <include name="**/*Test*.java"/>
     <exclude name="**/AllTests.java"/>
    </fileset>
   </batchtest>

   <formatter type="brief" usefile="false"/>
   <formatter type="plain"/>
   <formatter type="xml"/>
  </junit>
 </target>

 <target name="report" depends="test">
  <junitreport todir=".">
   <fileset dir="./reports">
    <include name="TEST-*.xml"/>
   </fileset>
   <report format="frames" todir="."/>
  </junitreport>
 </target>
  
 <target name="clean">
  <delete dir="${classes.java.dir}" />
  <delete dir="${classes.test.dir}" /> 
 </target>
</project>