快速业务通道

Java开源测试工具JUnit简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
Result

如果一个TestCase在森林中运行,是否有人关心其结果呢?当然-你之所以运行测试就是为了要证实它们能够运行。测试运行完后,你想要一个记录,一个什么能够工作和什么未能工作的总结。

如果测试具有相等的成功或失败的机会,或者如果我们刚刚运行一个测试,我们可能只是在TestCase对象中设定一个标志,并且当测试完毕时去看这个标志。然而,测试(往往)是非常不均匀的-他们通常都会工作。因此我们只是想要记录失败,以及对成功的一个高度浓缩的总结。

The Smalltalk Best Practice Patterns(请参见 Beck, K. Smalltalk Best Practice Patterns, Prentice Hall, 1996)有一个可以适用的模式,称为Collecting Parameter(收集参数)。其建议当你需要在多个方法间进行结果收集时,应该在方法中增加一个参数,并传递一个对象来为你收集结果。我们创建一个新的对象,TestResult(测试结果),来收集运行的测试的结果。

public class TestResult extends Object {  protected int fRunTests;  public TestResult() {   fRunTests= 0;  } }

这个简单版本的TestResult仅仅能够计算所运行测试的数目。为了使用它,我们不得不在TestCase.run()方法中添加一个参数,并通知TestResult该测试正在运行:

public void run(TestResult result) {  result.startTest(this);  setUp();  runTest();  tearDown(); }

并且TestResult必须要记住所运行测试的数目:

public synchronized void startTest(Test test) { fRunTests++; }

我们将TestResult的stratTest方法声明为synchronized,从而当测试运行在不同的线程中时,一个单独的TestResult能够安全地对结果进行收集。最后,我们想要保持TestCase简单的外部接口,因此创建一个无参的run()版本,其负责创建自己的TestResult。

public TestResult run() {   TestResult result= createResult();   run(result);   return result; } protected TestResult createResult() {   return new TestResult(); }

我们下面的设计快照可如图3所示。

Java开源测试工具JUnit简介 - 编程入门网

图3 TestResult应用Collecting Parameter

Java开源测试工具JUnit简介(4)

时间:2011-01-01 cn-java 李巍

如果测试总是能够正确运行,那么我们将没有必要编写它们。只有当测试失败时测试才是让人感兴趣的,尤其是当我们没有预期到它们会失败的时候。更有甚者,测试能够以我们所预期的方式失败,例如通过计算一个不正确的结果;或者它们能够以更加吸引人的方式失败,例如通过编写一个数组越界。无论测试怎样失败,我们都想执行后面的测试。

JUnit区分了失败(failures)和错误(errors)。失败的可能性是可预期的,并且以使用断言(assertion)来进行检查。而错误则是不可预期的问题,如ArrayIndexOutOfBoundsException。失败可通过一个AssertionFailedError来发送。为了能够识别出一个不可预期的错误和一个失败,将在catch子句(1)中对失败进行捕获。子句(2)则捕获所有其它的异常,并确保我们的测试能够继续运行...

public void run(TestResult result) {   result.startTest(this);   setUp();   try {    runTest();   }   catch (AssertionFailedError e) { //1    result.addFailure(this, e);   }   catch (Throwable e) { // 2    result.addError(this, e);   }   finally {    tearDown();   } }

TestCase提供的assert方法会触发一个AssertionFailedError。JUnit针对不同的目的提供一组assert方法。下面只是最简单的一个:

protected void assert(boolean condition) { if (!condition) throw new AssertionFailedError(); }(【译者注】由于与JDK中的关键字assert冲突,在最新的JUnit发布版本中此

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号