JUnit笔记二

1.(列举一项不用单元测试的失败案例)说明什么是单元测试(单元测试是开发者编写的一小段代码,用于检验代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试适用于判断某个),再说明执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致。执行单元测试也是为了对所有单独部分的行为建立信心,确信它们都和我们的期望一致。

2.在实际编程中该怎样做?a.需要使用一些断言(assertion);b.需要计划你的测试(其中包含了寻找边界条件,断言期望结果)

3.使用JUnit编写单元测试。首先,需要遵循一些命名规范:如有个creatAccount函数(方法),那么你的测试函数命名也许就该是testCreatAccount之类的。测试代码必须要做的以下几件事情:a.准备测试所需要的各种条件(创建所有必须的对象,分配必要的资源等等)。b.调用要测试的方法。c.验证被测试方法的行为和期望的是否一致。d.完成后清理各种资源。

4.JUnit中的各种断言:assertEquals、assertNull、assertSame、assertTrue、fail。

5.JUnit框架,使用框架的最小要求。

例1:

import junit.framework.*;

public class TestSimple extends TestCase{

       public TestSimple(String name){

               super(name);

       }

       public void testVoid(){

               assertEquals(2,1+1);

       }

}

以上是JUnit 4以前的做法,在JUnit 4中我们可以用JAVA 5的新特性,元数据注释来使用JUnit:(注意在用新的框架时,JAVA的源代码级别必须设置在JAVA 5以上)

例2:

import static org.junit.Assert.*;

import org.junit.Test;

public class TestSimple{

       @Test

       public void testVoid(){

               assertEquals(2,1+1);

       }

}

6.正因为JAVA语言的特性。一个测试类可以包含一些测试方法;每个测试方法包含一个或多个断言语句。一个测试类也能调用其他测试类:单独的类、包、甚至完整的系统。这些可以通过创建test suite来取得。

例3:

import junit.framework.*;

public class TestClassOne extends TestCase{

       public TestClassOne(String method){

               super(method);

       }

       public void testAddition(){

               assertEquals(4,2+2);

       }

       public void testSubtraction(){

               assertEquals(0,2-2);

       }

}

默认的,因为使用了Java的反射机制,将会运行testAddition与testSubtraction方法。

例4:

import static org.junit.Assert.*;

import org.junit.Test;

public class TestClassOne{

       public TestClassOne(String method){

               super(method);

       }

       @Test

       public void testAddition(){

               assertEquals(4,2+2);

       }

       @Test

       public void testSubtraction(){

               assertEquals(0,2-2);

       }

       public static Test suite(){

               TestSuite suite = new TestSuite();

               suite.addTest(new TestClassOne("testAddition"));

               return suite;

       }

}

在例4中,通过给构造方法传递String型参数,使得TestCase返回一个对命名测试方法的引用。有时,我们可能希望例3与例4中的事情同时发生,那么我们可以创建一个更高级别的测试来组合两个测试类(对于一个测试类也可以,就像上面的TestClassOne)

例5:

import junit.framework.*;

public class TestClassTop extends TestCase{

       public TestClassTop(String method){

               super(method);

       }

       static public Test suite(){

               TestSuite suite = new TestSuite();

               suite.addTest(TestClassOne.suite());

               suite.addTestSuite(TestClassOne.class);

               return suite;

       }

}

 

7.Per-method与Per-suite

 

8.JUnit与异常

 

9.Right-BICEP

       Right— 结果是否正确呢?怎样测试?使用数据文件,注意:测试前多注意一下数据文件,往往人为计算的数据比测试代码更可能是错误的。

       B— 边界条件。寻找边界条件是最有价值的工作。一般需要考虑的条件:

               a.完全伪造或者不一致的输入数据。

               b.格式错误的数据,例如没有顶层域名的邮件地址。

               c.空值或者不完整值。

               d.一些与意料中的合理值相去甚远的数值。

               e.要求的是一个不允许重复的list,但是传入的是一个存在重复数值的list。

               f.如果要求的是一个有序的list,但是传入的是一个无序的list,或者相反。

               g.事件到达的次序是错误的,或者碰巧和期望的次序不一致。

       I— 检查反向关联。如:通过计算x的平方根来验证s*s=x的算法。

       C— 使用其他方法实现交叉检查。结果唯一而算法多样。

       E— 强制产生错误条件。

       P— 性能特性。

      

10.考虑边界条件(CORRECT)

       边界条件的考虑是单元测试中最重要的一步。

       C— 一致性(Conformance)

       O— 有序性(Ordering)

       R— 区间性(Range)

       R— 引用/耦合性(Reference)

       E— 存在性(Existence)

       C— 基数性(Cardinality)

       T— 时间性(Time),绝对或者相对的。

      

11.Mock对象

       Mock对象也就是在调试期真实对象的替代品。真实对象的内涵请参考Tim Mackinnon[MFC01]。

       使用mock对象进行测试时,注意三个步骤:

       a.使用一个接口(interface)来描述这个对象。

       b.为产品代码实现这个接口。

       c.以测试为目的,在mock对象中实现这个接口。

      

12.Easy-Mock对象

 

13.A-TRIP

 

14.测试代码目录结构

 

15.测试骨架

 

16.Java源代码测试

 

17.SQL语句验证测试

       a.找出执行SQL语句的方法体

      

18.数据库测试

 

19.Web测试

 

20.XSL测试

 

21.XML测试(测试xfire、spring等等配置文件的有效性)

       断言使用:

       assertEquals("wyx",document.getTextAtXpath("/node1/node3"));

       符合这个简单断言的xml文档可能是这样的:

       <?xml version='1.0'>

       <node1>

               <node2>wnanfirst</node2>

               <node3>wyx</node3>

       </node1>

       或者你的断言还有一种解决办法:

       assertFalse(document.getNodesAtXpath("//node1[node3='wyx']").isEmpty());

22.对于测试的测试

 

23.JUnit结果汇报

       需要注意,如果在eclipse中使用,必须在构建的时候在类路径上加入junit的lib才行。

       编写了一个较为通用的build.xml,如下:

        <?xml version='1.0' encoding='utf-8'?>

       <project basedir="." default="report" name="run_html">

               <property name="src.dir" location="${basedir}/src" />

               <property name="classes.dir" location="${basedir}/bin" />

               <property name="report.dir" location="${basedir}/report" />

               <property name="lib.dir" value="${basedir}/lib" />

               <property name="dist.dir" value="${basedir}/dist" />

               <property name="doc.dir" value="${basedir}/doc" />

      

               <path id="master-classpath">

                       <fileset file="${lib.dir}*Test.*" />

                                       </fileset>

                               </batchtest>

                       </junit>

               </target>

      

               <!-- 打包成jar -->

               <target name="pack" depends="run" description="make .jar file">

                       <mkdir dir="${dist.dir}" />

                       <jar destfile="${dist.dir}/hello.jar" basedir="${classes.dir}">

                               <exclude name="**Test*.*" />

                       </jar>

               </target>

              

               <!-- 输出测试汇报 -->

               <target name="report"

                       depends="pack"

                       description="=> generate JUnit HTML report">

                       <junitreport todir="${report.dir}/xml">

                               <fileset dir="${report.dir}/xml">

                                       <include name="TEST-*.xml" />

                               </fileset>

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

                       </junitreport>

               </target>

       </project>

24.JUnit测试Hibernate

25.JUnit测试Spring

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值