您的位置:首页 > 其它

Junit单元测试基础知识入门简介

2016-01-13 13:21 423 查看
本篇内容全部搜集整理自网络资源
    JUnit是一个Java语言的单元测试框架,多数Java的开发环境(像eclipse)都已经集成了JUnit作为单元测试的工具。
    Junit测试是一个回归测试框架,是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
Junit测试的优点:
1、可以使测试代码与产品代码分开。
2、针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。
3、 易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发。 
4、 JUnit是公开源代码的,可以进行二次开发。
5、可以方便地对JUnit进行扩展。 
Junit编写原则:
1、是简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。
2、可使测试单元保持持久性。
3、可以利用既有的测试来编写相关的测试。
Junit的特征:
1、使用断言方法判断期望值和实际值差异,返回Boolean值。
2、测试驱动设备使用共同的初始化变量或者实例。
3、测试包结构便于组织和集成运行。
4、支持图形交互模式和文本交互模式。
Junit框架的组成:
1、测试用例(TestCase):对测试目标进行测试的方法与过程的集合
2、测试包(TestSuite):测试用例的集合,可容纳多个测试用例(TestCase)。
3、测试结果(TestResult):测试结果的描述与记录。
4、测试监听(TestListener):测试过程中事件的监听者。
5、测试失败元素(TestFailure):每一个测试方法所发生的与预期不一致状况的描述。
6、测试框架出错异常(AssertionFailedError):junit执行测试时所抛出的异常。
        JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象;当调用TestSuite对象的run()方法时,会遍历自己容纳的对象,逐个调用它们的run()方法。
Junit中常用的接口和类:
   
Test接口——运行测试和收集测试结果
1、Test接口使用了Composite设计模式,是单独测试用例 (TestCase),聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口。
2、重要方法:
public int countTestCases()方法:统计这次测试有多少个TestCase;
public void run(TestResult)方法:TestResult是实例接受测试结果,run方法执行本次测试。
      TestCase抽象类——定义测试中固定方法测试代码的放置:
1、TestCase是实现Test接口的抽象类(不能被实例化,只能被继承)。
其构造函数TestCase(Stringname)根据输入的测试名称name创建一个测试实例。由于每一个TestCase在创建时都要有一个名称,若某测试失败了,便可识别出是哪个测试失败。
2、重要方法:
              (1)setUp()方法:集中初始化测试所需的所有变量和实例,在执行测试类中的每个测试方法之前都会执行一遍此方法。
              (2)tearDown()方法:在每个测试方法执行完之后均会执行,可用来释放测试程序方法中引用的变量和实例。
3、编写测试用例时,只需继承TestCase抽象类,以test为前缀名编写测试方法即完成run方法,然后Junit自动获得测试用例,执行它的run方法,把测           试结果记录在TestResult之中。
      
Assert静态类——一系列断言方法的集合:

1、Assert包含了一组静态的测试方法,用于实际值与期望值相比是否正确,如果错误,即测试失败,Assert类就会抛出一个AssertionFailedError异常,JUnit测试框架将这种错误归入Failes并加以记录,同时标志为未通过测试。如果该类方法中指定一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息,告诉测试人员此异常的详细信息。
2、Junit提供了6大类31组断言方法,包括基础断言、数字断言、字符断言、布尔断言、对象断言。
     TestResult结果类以及TestListener接口、TestFailure类
1、TestResult结果类集合了任意测试的累加结果,通过TestResult实例传递个每个测试的Run()方法。TestResult在执行TestCase时,如果失败会异常抛出
2、TestListener接口是个事件监听规约,可供TestRunner类使用。它通知 listener的对象相关事件,方法包括测试开始startTest(Testtest),测试结束endTest(Testtest),错误,增加异常addError(Test test,Throwable t)和增加失败addFailure(Testtest,AssertionFailedError
t)
3、TestFailure失败类是个“失败”状况的收集类,解释每次测试执行过程中出现的异常情况。其toString()方法返回“失败”状况的简要描述
     TestSuite测试包类——多个测试的组合
1、TestSuite类负责组装多个Test Cases。测试类中可能包括了对被测类的多个测试,而TestSuit负责收集这些测试,使我们可以在一个测试中,完成对被测类的所有测试。
2、TestSuite类实现了Test接口,且可以包含其它的TestSuites。它可以处理加入Test时的所有抛出的异常。
3、TestSuite处理测试用例有6个规约(否则会被拒绝执行测试)(junit4之后不需要),也是编写测试用类时注意的事项。
编写测试用类时注意事项即六项契约:(junit4之后由于采用元数据注解的方式,代码相对灵活,要求没有这么苛刻)
测试用例类必须是公有类(public关键词修饰)
测试用例类必须继承自TestCase类
测试用例类的测试方法必须是公用的(public修饰)
测试用例类的测试方法的返回值必须被声明为void
测试用例类的测试方法的方法名的前置名词必须是test
测试用例类的测试方法无任何传递参数。
测试代码的编写步骤:
1、创建并初始化被测试对象
2、调用被测方法,取得方法的返回值或系统状态变化
3、创建“期待结果”
4、调用适合的Assert方法。
测试用例类相对于被测试类的三种放置方式:
1、同一目录——针对小型项目
例:
待测类:com.edward.business.Account.java
测试类:com.edward.business.TestAccount.java
优点:TestAccount能够访问Account的protected成员变量和函数
缺点:测试代码到处都是,且堆积在产品代码的目录中。
2、在待测代码目录下创建一个test子目录
例:
待测类:com.edward.business.Account.java
测试类:com.edward.business.test.TestAccount.java
优点:测试代码放远一点,但又不至于太远
缺点:测试代码与被测代码在不同的包中,测试类无法访问被测类中的protected成员;
解决方法:写一个待测类的子类来暴露待测类的成员,然会在测试代码中使用子类
3、并行树:测试类和被测类放于同一个包中,但位于不同的源代码树,但是这两棵树的根都在编译器的class-path中。
例:
在eclipse中,项目名:JUnitTest中
被测类:JUnitTest/src/com.edward.business.Account.java
测试类:JUnitTest/test/com.edward.business.TestAccount.java
优点:继承了前两种做法的优点而屏蔽了缺点,并且保证了test代码相对独立。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息