使用JUnit高效完成功能测试[2]

发表于:2010-04-01来源:作者:点击数: 标签:junitJunitJUnitJUNIT功能
使用JUnit高效完成功能测试[2] 功能测试工具 运行:调用被测试的代码,记录所有值得注意的输出和数据。 检查:使用断言语句确保代码正常运行。 举例来说,假设要测试Saxon库的转换类入口点。其中一个 用例 是将XML文件转换为HTML文件,当然前提是已有描述这

  使用JUnit高效完成功能测试[2]   功能测试工具

  运行:调用被测试的代码,记录所有值得注意的输出和数据。

  检查:使用断言语句确保代码正常运行。

  举例来说,假设要测试Saxon库的转换类入口点。其中一个用例是将XML文件转换为HTML文件,当然前提是已有描述这个转换的XSL文件。输入这三个文件的路径,就应该输出HTML文件的内容。这可以直接转为下面的测试:

  public void testXSLTransformation() {

  /* initialize the variables

  (or do this in setUp if used in many tests) */

  String processMePath = "/path/to/file.xml";

  String stylesheetPath = "/path/to/stylesheet.xsl";

  String outputFilePath = "/path/to/output.xml";

  //do the work

  Transform.main(new String[] {

  processMePath,

  stylesheetPath,

  "-o", outputFilePath } );

  //check the work

  assertTrue(checkOutputFile(outputFilePath));

  }

  每一步都可以根据需要进行增减。这里声明的变量也可以简单地通过调用方法来赋值。预期输出的实现是由几个步骤组成。如果成功得到预期输出,有时可以省略检查步骤。

  虽然这个模式简单且灵活可变,但是第二步必不可少。这个模板没有告诉我们寻找要测试代码的方法,也不能保证代码以方便测试的方式运行。这是个需要认真考虑的问题。

  功能测试

  通过确定执行程序功能的主要代码段,可以将测试建立在一个更有效的环境下。由于这些类提供了从系统外部进行测试的途径,所以也是代码的入口点。

  因此,功能测试的整体目标就是确定一组可以访问系统功能的高层接口类。这些类的独立性越高越好。毕竟,如果能将类从环境中分离出来,测试起来会更加容易。

  确定作为入口点的代码是一个简单的过程。在代码库中,通常有几个控制该库所有功能的入口点。这些外部类作为客户端代码,与库的中介对象将开发人员从复杂的代码分析中解脱出来。这些便是应当首先对其方法进行测试的类。

  比如,Saxon有一小组类作为逻辑入口点提供对库的访问。通过对外部类进行编码操作,比如转换、设置和查询,客户端代码可以访问库的许多功能类,而无需考虑类的接口问题,甚至无需担心这些类是否存在。这些外部类用高层易用的接口提供一个简单的方式对系统功能进行测试,这正是一个优良的库的特征。软件测试

  程序代码中的各个功能模块通常是各自独立的。在某些代码中,甚至可以认为这些模块各自对应不同的、可通过大量外部类访问的库。这些类查找高层接口的逻辑位置。插件结构通常都采用这种设计模式:每个插件程序都有一个可以有效执行内部代码全部功能的简单接口。

原文转自:http://www.ltesting.net