`
and4walker
  • 浏览: 564031 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何做好单元测试

阅读更多
         JUNIT基本教程
使用目的
       junit是java中书写unit test的framework,目前一些流行的unit test工具大都都是在junit上扩展而来的。目前它的版本是junit3.8.1,可以从www.junit.org上下载。

Eclipse中配置junit

在要使用JUNIT的project名上,点击properties--java build path-libraries, 点击Add External JARs,把JUNIT包点上就行了. 并在需要测试的项目上新建junit test case

用法

1.       基本使用步骤,Junit的使用非常简单,它的基本使用步骤:


-          创建,从junit.framework.TestCase派生unit test需要的test case


-          书写测试方法,提供类似于如下函数签名的测试方法:


public void testXXXXX();


-          编译,书写完test case后,编译所写的test case类


-          运行,启动junit test runner,来运行这个test case。


Junit提供了2个基本的test runner:字符界面和图形界面。启动命令分别如下:


a 图形界面:


java junit.swingui.TestRunner XXXXX


b 字符界面:


java junit.textui.TestRunner XXXXX


2.       使用例子:


import junit.frmework.TestCase;


public class TestSample extends TestCaset{


        public void testMethod1(){


        assertTrue( true);


}


}


3.       setUp与tearDown,这两个函数是junit framework中提供初始化和反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下:





     测试开始 -> setUp -> testXXXX -> tearDown ->测试结束





4.       使用例子:


import junit.frmework.TestCase;


public class TestSample extends TestCaset{


protected void setUp(){


               //初始化……


}





        public void testMethod1(){


        assertTrue( true);


}





potected void tearDown(){


       //撤销初始化……


}


}


5.       区分fail、exception。


-          fail,期望出现的错误。产生原因:assert函数出错(如assertFalse(true));fail函数产生(如fail(……))。


-          exception,不期望出现的错误,属于unit test程序运行时抛出的异常。它和普通代码运行过程中抛出的runtime异常属于一种类型。


对于assert、fail等函数请参见junit的javadoc。


6.       使用例子:


import junit.frmework.TestCase;


public class TestSample extends TestCaset{


protected void setUp(){


               //初始化……


}





        public void testMethod1(){


        ……


        try{


               boolean b= ……


               assertTrue( b);


               throw new Exception( “This is a test.”);


               fail( “Unable point.”); //不可能到达


        }catch(Exception e){


               fail( “Yes, I catch u”); //应该到达点


}


……


}





potected void tearDown(){


       //撤销初始化……


}


}


7.       组装TestSuite,运行更多的test。在junit中,Test、TestCase和TestSuite三者组成了composiste pattern。通过组装自己的TestSuite,可以完成对添加到这个TestSuite中的所有的TestCase的调用。而且这些定义的TestSuite还可以组装成更大的TestSuite,这样同时也方便了对于不断增加的TestCase的管理和维护。


       它的另一个好处就是,可以从这个TestCase树的任意一个节点(TestSuite或TestCase)开始调用,来完成这个节点以下的所有TestCase的调用。提高了unit test的灵活性。


8.       使用例子:


import junit.framework.Test;


import junit.framework.TestSuite;


public class TestAll{


public class TestAll{


        //定义一个suite,对于junit的作用可以视为类似于java应用程序的main。


    public static Test suite(){


        TestSuite suite = new TestSuite("Running all tests.");


        suite.addTestSuite( TestCase1.class);


        suite.addTestSuite( TestCase2.class);


        return suite;


    }


}


运行同运行单独的一个TestCase是一样的,参见step 1 “运行”。


9.       使用Ant junit task。我们除了使用java来直接运行junit之外,我们还可以使用junit提供的junit task与ant结合来运行。涉及的几个主要的ant task如下:


-          <junit>,定义一个junit task


-          <batchtest>,位于<junit>中,运行多个TestCase


-          <test>,位于<junit>中,运行单个TestCase


-          <formatter>,位于<junit>中,定义一个测试结果输出格式


-          <junitreport>,定义一个junitreport task


-          <report>,位于<junitreport>中,输出一个junit report


具体的语法请参见相关文档。


10.   使用例子:


<junit printsummary="yes" haltonfailure="no">


    <classpath>


        <path refid="classpath"/>


        <pathelement location="${dist.junit}"/>


    </classpath>


   


    <formatter type="brief" usefile="false"/>


    <formatter type="xml"/>





    <batchtest todir="${doc.junitReport}">


        <fileset dir="${dist.junit}" includes="**/*Test.class" />


    </batchtest>


</junit>





<junitreport todir="${doc.junitReport}">


    <fileset dir="${doc.junitReport}">


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


    </fileset>


    <report format="frames" styledir="${junit.styleDir}" todir="${doc.junitReport}"/>


</junitreport>


检查表

       junit的使用并不很难,然而要书写一个好的TestCase却并非易事。一个不好的TestCase往往是既浪费了时间,也起不了实际的作用。相反,一个好的TestCase,不仅可以很好的指出代码中存在的问题,而且也可以作为代码更准确的文档,同时还在持续集成的过程中起非常重要的作用。在此给出书写TestCase时需要注意的几点:


-          测试的独立性:一次只测试一个对象,方便定位出错的位置。这有2层意思:一个TestCase,只测试一个对象;一个TestMethod,只测试这个对象中的一个方法。


-          给测试方法一个合适的名字。


-          在assert函数中给出失败的原因,如:assertTrue( “… should be true”,  ……),方便查错。在这个例子中,如果无法通过assertTrue,那么给出的消息将被显示。在junit中每个assert函数都有第一个参数是出错时显示消息的函数原型。


-          测试所有可能引起失败的地方,如:一个类中频繁改动的函数。对于那些仅仅只含有getter/setter的类,如果是由IDE(如Eclipse)产生的,则可不测;如果是人工写,那么最好测试一下。


-          在setUp和tearDown中的代码不应该是与测试方法相关的,而应该是全局相关的。如针对与测试方法A和B,在setUp和tearDown中的代码应该是A和B都需要的代码。


-          测试代码的组织:相同的包,不同的目录。这样,测试代码可以访问被测试类的protected变量/方法,方便测试代码的编写。放在不同的目录,则方便了测试代码的管理以及代码的打包和发布。一个例子如下:


src   <=源代码根目录


|---com


     |---mod1


         |---class1


junit   <=测试代码根目录


|---com


     |---mod1


         |---class1



分享到:
评论

相关推荐

    单元测试的代码覆盖率至少80%

    单元测试的代码覆盖率至少80%!一大早,一个年轻的程序员问大师:“我准备写一些单元测试用例。代码覆盖率应该达到多少为好?”大师回答道:“不要考虑代码覆盖率,只要写出一些好的测试用例即可。”  一大早,一个...

    软件测试小论文----单元测试及测试工具的研究与应用

    1. 时间方面:认真做好单元测试,将会在系统集成联调时节约很多时间,反之由于各种原因放弃单元测试的做法,将会给后期集成测试和系统测试工作带来诸多隐患。 2. 测试效果:单元测试是测试阶段的基础,能发现较深...

    什么是单元测试?如何做好单元测试?

    如何做好单元测试? 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。   单元测试都是以自动化的方式执行,所以在大量回归...

    怎样才能做好单元测试

    本文从组织、流程和技术三个方面来阐述了做好单元测试的一些关键因素,可以作为软件企业开展单元测试活动的参考。  【摘要】单元测试是软件开发过程中重要的质量保证活动,单元测试的质量将很大程度上影响软件产品...

    单元测试培训文档.pptx

    5. **依赖集成测试**:有的团队认为只要做好了集成测试就能捕获所有的问题,因此忽视了单元测试的作用。 6. **紧迫的开发周期**:在赶项目进度的情况下,为了尽快完成编码任务,往往会牺牲单元测试这一环节。 #### ...

    单元测试分享演讲稿

    简单介绍单元测试,以及为什做,如何做,做了结果和目的是什么。

    做好单元测试需要保证的三个独立

    单元测试是针对代码单元的独立测试。“独立”是指将代码从原始项目及其依赖的环境中隔离出来,针对各个单元单独进行测试,包括三方面含义:形式独立、实质独立和意识独立。单元测试之所以困难,就在于技术上无法解决...

    软件测试必看 入门级的教程

    八 如何做好单元测试 36 8.1 前言 36 8.2 组织结构应该保证测试组参与单元测试 36 8.3 加强单元测试流程规范性 37 8.3.1 制订单元测试的过程定义 37 8.3.2 单元测试工作产品必须纳入配置管理 38 8.3.3 必须...

    利用有限的测试资源在项目中开展单元测试和接口测试

    利用有限的测试资源在项目中开展单元测试和接口测试 软件测试 对于单元测试和接口测试的概念,我想即便是刚刚毕业参加工作的测试工程师都能在面试的时候说得出个一二三,市面上也有大量的书籍介绍单元测试接口测试...

    软件单元测试的重要性

    时间方面:如果认真的做好了单元测试,在 软件单元测试的重要性 软件测试 测试的重要性 单元测试是软件测试的基础,因此单元测试的效果会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。...

    告诉你怎么做软件测试,以及如何做好软件测试

    总结,做好软件测试需要全面的知识覆盖,从基础的单元测试到复杂的系统测试,再到高效的自动化测试和缺陷管理。熟练掌握各种工具和框架,结合实际项目经验,才能确保软件质量,提升用户满意度。

    一个java应用程序的单元测试的遗产不知道record-n-run测试工具.zip

    在Java开发过程中,单元测试是确保代码质量的重要环节。它允许开发者验证代码的各个独立部分(即“单元”)是否按预期工作。本资源“一个java应用程序的单元测试的遗产不知道record-n-run测试工具.zip”似乎包含了一...

    51Testing软件测试网 电子杂志1

    如何做好单元测试 - **单元测试的意义**: 单元测试是一种软件测试类型,主要关注软件中的最小可测试单元,如函数或类的方法。 - **实施步骤**: 包括选择合适的测试框架、编写测试代码、执行测试、分析结果等。 - **...

    【考研361】2013数学高等数学基础全套讲义和单元测试题及答案 .rar

    通过系统学习讲义,深入理解每个概念,并通过单元测试题进行反复操练,考生可以有效地提高自己的数学水平,为考研做好充分准备。记住,高等数学不仅是数学的基础,也是许多科学和技术领域的基石,因此投入时间和精力...

    网课-演讲与口才--网上单元测试答案.pdf

    从给出的文件信息来看,文件标题为“网课-演讲与口才--网上单元测试答案.pdf”,而文件描述为“网课-演讲与口才--网上单元测试答案”,文件标签为“接口”,且文件的部分内容显示有大量重复的文字“创创大帝”。...

Global site tag (gtag.js) - Google Analytics