您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
Junit内部解密
作者:网络转载 发布时间:[ 2013/4/11 13:36:09 ] 推荐标签:

  Junit 内部解密之: TestResult + TestListener + Assert

  之前我们看到了Test接口里面的run方法有个TestResult的参数,不错,这个类是用来收集测试结果的,是收集TestSuite的运行结果,所以一般情况下,一个TestSuite对应一个TestResult. TestResult存储了所有测试的详细情况,是通过还是失败。

  如果是失败:Junit会创建一个TestFailure对象,并保存在TestResult中。

  这里知道了TestResult的作用,这种做法也会引入另外一个设计模式。

  Java设计模式:Collecting Parameter模式

  定义:当你需要从几个方法中收集结果时,你应当给方法增加一个参数,并传递一个会替你收集参数的对象。

  这里TestResult类是起到了这个作用。但是我们知道TestResult是收集很多运行的Test的运行结果,这里需要对于这些运行结果进行管理,则TestResult类定义了如下相关的方法:

  public synchronized void addError(Test test, Throwable t) 新增一个错误到ArrayList。

  public synchronized void addFailure(Test test, AssertionFailedError t) 新增一个失败到ArrayList。

  public synchronized void addListener(TestListener listener) 在一个test中注册一个监听器到ArrayList,这个监听器是TestListener,实现类是TestRunner。

  public synchronized void removeListener(TestListener listener) 从一个test中取消这个监听器。

  private synchronized List cloneListeners() 克隆一批监听器。

  我们已经知道了TestResult的作用,那么TestListener的作用又是什么呢?在Run一个测试用例的时候有很多的结果,这时由TestListener去观察这个运行的结果,并且负责报告这些运行信息。

  TestListener是个接口,一般由Test Runner,很多特定的Junit扩展也实现了这个接口,我们来看下这个接口里面定义了哪些方法:

  public void addError(Test test, Throwable t); 发送错误的时候才被调用。

  public void addFailure(Test test, AssertionFailedError t); 失败的时候才被调用。

  public void endTest(Test test); 测试结束时被调用。

  public void startTest(Test test); 测试开始时被调用。

  由于定义了这个TestListener接口和实现类TestRunner的作用都看到了,特别是给扩展Junit提供了新的实现类的方式,这样的做法引出了一个设计模式。

  Java设计模式:Observer模式

  定义:在对象之间定义了一个一对多的依赖关系,这样当一个对象改变了状态,那么所有依赖于它的对象都会自动收到通知且更新。目前Junit框架的TestRunner以TestListener的身份注册到TestResult。

  我们在写testcase的时候,都会用到Assert方法去check运行结果,这时候的Assert方法是继承了Junit的TestCase类,但是你如果还记得TestCase类的声明的话,那是TestCase不仅仅实现了Test接口,而且也继承了Assert类,其实这些Assert方法是Assert类中实现的。

  Junit的Assert类中总共有38个Assert方法,但很多都是不停的重载,其实只有8个核心方法:

  assertTure; assertFalse; assertEquals; assertNotEquals; assertNull; assertSame; assertNotSame; fail(让测试失败,并给出指定的信息)

  一般要用到抛出message的都会用到fail方法。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd