转自:http://blog.sina.com.cn/s/blog_6cf812be0100wbhq.html

nterface: Test 整个测试的的基础接口

Method 1: abstract int countTestCases()  这个方法主要是用来计算要运行的test case的数量的。

Method 2:abstract void run(TestResult result)  这个方法主要是用来执行一个测试用例并且在测试结果的实例中收集它的测试结果。

Class:TestCase

定义:abstract class TestCase extends Assert implements Test 继承了Assert类并且实现了Test接口。而且是个抽象类。

Class: TestSuite

定义:class TestSuite implements Test;  Test接口的实现类,和TestCase一样. 但是TestSuite是一系列testcase的集合,将所有要运行的testcase add到TestSuite。

观察一:TestCase 和 TestSuite类都实现了Test 接口。

好处一:由于当你给TestSuite增加一个对象时,实际上增加的是Test,而不只是个TestCase,这样我们就既可以在TestSuite里面增加另一个TestSuite,也可以加入一个TestCase。如果是TestCase,那么就会运行那个单独的测试;如果是TestSuite,那么就运行一组测试。

如何实现:那么是如何实现上面说的那个好处呢?看下TestSuite的一个addtest方法就明白了:

Public void addTest(Test test)     新增一个test到testsuite,直接使用fTests.add(test)来新增。

这里可以新增的入参是Test接口,而不是一个TestCase对象,所以只要实现了Test接口的实现类,包括TestCase和TestSuite,都可以不断的增加下去。这样就引出了好处二和设计模式。

好处二:当我们为自己的应用程序创建特殊的suite或组合出TestAll类非常容易。简单说明下TestAll类:仅仅包含了一个静态的suite方法,会注册需要定期执行的所有的Test对象(包括TestCase对象和TestSuite对象)。

Java设计模式:Composite模式

定义:把对象组合(composite)成树状结构来表示部分-整体层次关系,Composite模式可以让客户一致的对待单个对象和对象的组合。

我们来看下Junit的Test接口和TestCase和TestSuite类是如何实现Composite模式的:

先搞清楚Junit里面的部分-整体分别是什么,这里单个的TestCase可以看作是部分,把复合的TestCase(TestSuite)看作是整体,看下面的图:

我们可以看到这样的模式会带来另外一些好处:

简化了JUnit的代码  JUnit可以统一处理组合结构TestSuite和单个对象TestCase。使JUnit开发变得简单容易,因为不需要区分部分和整体的区别,不需要写一些充斥着if else的选择语句。

好处三:TestCase是个抽象实现类,而且继承了Assert类,这里为啥要继承Assert类呢?因为在一个testcase中是肯定需要用的Assert断言的,如果不继承Assert类,那么testcase方法中要写成Assert.assert(),不是很简洁,现在继承了Assert类后,我们就可以在继承了TestCase类的测试类中直接assert(),使测试代码看得非常简洁和清楚。

定义了TestCase对象和TestSuite的类层次结构  基本对象TestCase可以被组合成更复杂的组合对象TestSuite,而这些组合对象又可以被组合,如我们上个例子,这样不断地递归下去。客户代码中,任何使用基本对象的地方都方便的使用组合对象,大大简化系统维护和开发。

仔细看看Test接口的方法,它存在一个是countTestCases方法,它来统计这次测试有多少个TestCase,另外一个方法run。还有一个参数TestResult,它来统计测试结果。这里为啥存在一个run方法呢? 我们想想Junit在run testcase的时候,需要把这些testcase的组成打包后成为请求发送到Junit Framework,这样我们实现TestCase类的时候,可以自由的实现run方法去打包发送请求。这样我们在写测试用例时候,只需继承TestCase,来完成run方法即可,把测试结果记录到TestResult中,这样的做法就好引出另外的Java设计模式。

Java设计模式:Command模式

定义:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求进行排队或记录请求日志...,Command告诉我们可以为一个操作生成一个对象并给出它的一个execute(执行)方法。

run()就是我们的Command模式的Excecute方法:

我们可以看到这样的模式会带来另外一些好处:

Command模式将实现请求的一方(TestCase开发)和调用一方(JUnit Fromwork)分离开。

Command模式可以将多个TestCase进行组合成一个复合命令,实际你将看到TestSuit就是它的复合命令。

转载于:https://www.cnblogs.com/daxiong2014/p/4501171.html

Junit 内部解密之一: Test + TestCase + TestSuite相关推荐

  1. Junit内部解密之三: 单元测试用例运行的全过程

    转自:http://blog.sina.com.cn/s/blog_6cf812be0100x8sb.html 我们以一个非常简单的TestCalculator类为例,只有一个测试方法: Public ...

  2. Junit内部解密之四: Junit单元测试最佳实践

    我们做使用Junit工具来做单页测试或接口测试时,需要注意一些问题,包括我们的编码规范,test规范,以及编写测试代码的策略,以下个人的总结. 1.为还没有实现的测试代码抛出一个异常.这就避免了该测试 ...

  3. junit源码解析--初始化阶段

    OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...

  4. 用JUnit框架实现Java单元测试

    http://tech.it168.com/j/2007-08-27/200708271737659.shtml 单元测试是整个测试流程中最基础的部分,它们要求程序员尽可能早地发现问题,并给予控制,这 ...

  5. junit in action读书笔记

    第一章: junit起步  1.2从头开始  Junit的基本原则: 若程序的某项功能没有经过测试,那么该功能基本等于不存在.  1.3理解单元测试框架  所有测试都遵守的3条原则  1.每个单元测试 ...

  6. eclipse 环境 JUnit 测试框架(junit.framework.* 与 org.junit.*)

    如下所示,先通过 build path 导入 junit 环境依赖的 jar 包: 1. junit.framework.* junit.framework.* 主要类和函数: Test TestCa ...

  7. 【TestCase】No tests found in

    背景:看了TestCase类,打算写个例子,结果报No tests found in和TestSuite的错误.搜索找到一篇解决了这个问题,见参考链接. 参考该文章,把想用于测试的方法改名(以test ...

  8. junit 测试似有方法_Spring整合Junit的使用

    今天来讲讲Spring整合junit的使用 我们在编写完Spring的代码后,往往需要测试代码的正确性,这个时候就需要用到单元测试了.我们这里使用的版本是junit4. 一个程序的入口是main方法, ...

  9. 用于单元测试的JUnit教程–最终指南(PDF下载)

    编者注: 我们在Java Code Geeks上提供了许多JUnit教程,例如JUnit入门示例 , 使用断言和注释的 JUnit 示例 , JUnit注释示例等. 但是,为了方便读者,我们希望将所有 ...

最新文章

  1. php5.3+ 安装(mysqlnd )
  2. python爬虫完整实例-python爬虫实战之爬取京东商城实例教程
  3. memcache的原理和命中率的总结
  4. Bootstrap组件_分页
  5. 车刀 matlab,可转位车刀的结构
  6. spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config
  7. 给缺少Python项目实战经验的人,赶紧收藏!
  8. 第 7 节:前端面试指南 — 微信小程序篇(附面试题答案)
  9. mysql主从配置自增id_MySQL自增列主从不一致的测试(r12笔记第37天)
  10. Excel比较工具SpreadSheet
  11. Linux下JAVA线程占用CPU高的分析方法
  12. java applet介绍,Java Applet教程介绍
  13. python乌龟赛跑_Python之龟兔赛跑
  14. Silverlight新型的富媒体
  15. 数学知识的一些常用公式
  16. shell的一些基础
  17. sql统计某字段出现次数
  18. LDA+U中U值的计算方法
  19. windows安装Pillow报错找不到zlib
  20. layui tree 对节点进行搜索

热门文章

  1. LeetCode LCS 03. 主题空间(广度优先搜索BFS)
  2. LeetCode 334. 递增的三元子序列
  3. LeetCode 559. N叉树的最大深度
  4. Flink的时间语义和Watermark
  5. 日志级别动态调整——小工具解决大问题
  6. 会议交流 | 知识图谱前沿技术与热门应用
  7. 论文浅尝 - ICML2020 | 基于子图推理的归纳式关系预测
  8. 基于PaddleRec的用户点击率预测
  9. Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析
  10. 【笔试面试】C#中的程序集