JUnit入门及应用
相关概念 Ø JUnit 是一个开发源代码的Java测试框架 用于编写和运行可重复的测试 它是用于单元测试框架体系xUnit的一个实例(用于java语言) 主要用于白盒测试 回归测试 Ø 白盒测试 把测试对象看作一个打开的盒子 程序内部的逻辑结构和其他信息对测试人 员是公开的 Ø 回归测试 软件或环境的修复或更正后的再测试 自动测试工具对这类测试尤其有用 Ø 单元测试 最小粒度的测试 以测试某个功能或代码块 一般由程序员来做 因为它需要知道内部程序设计和编码的细节 单元测试 单元测试的好处 Ø 提高开发速度 测试是以自动化方式执行的 提升了测试代码的执行效率 Ø 提高软件代码质量 它使用小版本发布至集成 便于实现人员除错 同时引入重构概念 让代码更干净和富有弹性 Ø 提升系统的可信赖度 它是回归测试的一种 支持修复或更正后的 再测试 可确保代码的正确性 单元测试的针对对象 Ø 面向过程的软件开发针对过程 Ø 面向对象的软件开发针对对象 Ø 可以做类测试 功能测试 接口测试(最常用于测试类中的方法) 单元测试工具和框架 目前的最流行的单元测试工具是xUnit系列框架 常用的根据语言不同分为JUnit(java) CppUnit(C++) DUnit (Delphi ) ) PhpUnit(Php )等等 单元测试框架的第一个和最杰出的应用就是由Erich Gamma (《设计模式》的作者)和Kent Beck(XP(Extreme Programming)的创始人 )提供的开放源代码的JUnit Junit入门简介 JUnit的好处和JUnit测试编写原则 使用JUnit的好处 Ø 可以使测试代码与产品代码分开 Ø 针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试 Ø 易于集成到测试人员的构建过程中 JUnit和Ant的结合可以实施增量开发 Ø JUnit是公开源代码的 可以进行二次开发 Ø 可以方便地对JUnit进行扩展 JUnit测试编写原则 Ø 简化测试的编写 这种简化包括测试框架的学习和实际测试单元的编写 Ø 使测试单元保持持久性 Ø 可以利用既有的测试来编写相关的测试 JUnit的特征 Ø 使用断言方法判断期望值和实际值差异 返回Boolean值 Ø 测试驱动设备使用共同的初始化变量或者实例 Ø 测试包结构便于组织和集成运行 Ø 支持图型交互模式和文本交互模式 JUnit框架组成 Ø 对测试目标进行测试的方法与过程集合 可称为测试用例(TestCase) Ø 测试用例的集合 可容纳多个测试用例(TestCase) 将其称作测试包(TestSuite) Ø 测试结果的描述与记录 (TestResult) Ø 测试过程中的事件监听者(TestListener) Ø 每一个测试方法所发生的与预期不一致状况的描述 称其测试失败元素(TestFailure) Ø JUnit Framework中的出错异常(AssertionFailedError) JUnit框架是一个典型的Composite模式 TestSuite可以容纳任何派生自Test的对象 当调用TestSuite对象的run()方法是 会遍历自己容纳的对象 逐个调用它们的run()方法
JUnit中常用的接口和类 Ø Test接口 运行测试和收集测试结果 Test接口使用了Composite设计模式 是单独测试用例(TestCase) 聚合测试模式(TestSuite)及测试扩展(TestDecorator)的共同接口 它的public int countTestCases()方法 用来统计测试时有多少个TestCase 另外一个方法就是public void run( TestResult ) TestResult是实例接受测试结果 run方法执行本次测试 Ø TestCase抽象类 定义测试中固定方法 TestCase是Test接口的抽象实现 (不能被实例化 只能被继承)其构造函数TestCase(string name)根据输入的测试名称name创建一个测试实例 由于每一个TestCase在创建时都要有一个名称 若测试失败了 便可识别出是哪个测试失败 TestCase类中包含的setUp() tearDown()方法 setUp()方法集中初始化测试所需的所有变量和实例 并且在依次调用测试类中的每个测试方法之前再次执行setUp()方法 tearDown()方法则是在每个测试方法之后 释放测试程序方法中引用的变量和实例 开发人员编写测试用例时 只需继承TestCase 来完成run方法即可 然后JUnit获得测试用例 执行它的run方法 把测试结果记录在TestResult之中 Ø Assert静态类 一系列断言方法的集合 Assert包含了一组静态的测试方法 用于期望值和实际值比对是否正确 即测试失败 Assert类就会抛出一AssertionFailedError异常 JUnit测试框架将这种错误归入Failes并加以记录 同时标志为未通过测试 如果该类方法中指定一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息 告诉测试人员改异常的详细信息 JUnit 提供了 大类 组断言方法 包括基础断言 数字断言 字符断言 布尔断言 对象断言 其中assertEquals(Object expcted Object actual)内部逻辑判断使用equals()方法 这表明断言两个实例的内部哈希值是否相等时 最好使用该方法对相应类实例的值进行比较 而assertSame(Object expected Object actual)内部逻辑判断使用了Java运算符 == 这表明该断言判断两个实例是否来自于同一个引用(Reference) 最好使用该方法对不同类的实例的值进行比对 asserEquals(String message String expected String actual)该方法对两个字符串进行逻辑比对 如果不匹配则显示著两个字符串有差异的地方 ComparisonFailure类提供两个字符串的比对 不匹配则给出详细的差异字符 Ø TestSuite测试包类??多个测试的组合 TestSuite类负责组装多个Test Cases 待测得类中可能包括了对被测类的多个测试 而TestSuit负责收集这些测试 使我们可以在一个测试中 完成全部的对被测类的多个测试 TestSuite类实现了Test接口 且可以包含其它的TestSuites 它可以处理加入Test时的所有抛出的异常 TestSuite处理测试用例有 个规约(否则会被拒绝执行测试) &sup ; 测试用例必须是公有类(Public) &sup ; 用例必须继承与TestCase类 &sup ; 测试用例的测试方法必须是公有的( Public ) &sup ; 测试用例的测试方法必须被声明为Void &sup ; 测试用例中测试方法的前置名词必须是test &sup ; 测试用例中测试方法误任何传递参数 Ø TestResult结果类和其它类与接口 TestResult结果类集合了任意测试累加结果 通过TestResult实例传递个每个测试的Run()方法 TestResult在执行TestCase是如果失败会异常抛出 TestListener接口是个事件监听规约 可供TestRunner类使用 它通知listener的对象相关事件 方法包括测试开始startTest(Test test) 测试结束endTest(Test test) 错误 增加异常addError(Test test Throwable t)和增加失败addFailure(Test test AssertionFailedError t) TestFailure失败类是个 失败 状况的收集类 解释每次测试执行过程中出现的异常情况 其toString()方法返回 失败 状况的简要描述
lishixinzhi/Article/program/Java/ky/201311/28693
2023-08-22 广告