现在的位置: 首页 > 综合 > 正文

用Jetif 代替JUnit!

2012年08月15日 ⁄ 综合 ⁄ 共 2447字 ⁄ 字号 评论关闭

Jetif简介

        你是否正在用一些常见的测试框架例如JUnit来开发单元测试程序呢?JUnit是一个很好的单元测试框架, 但是有些事情实现起来还是不太容易。比如说把测试数据和测试代码分离,把测试结果记录到一个文件中,记录 一些日志信息到一个文件中……

        Jetif被设计成满足以上的需求,提供大部分开发人员需要的功能,强大并且可伸缩的测试框架。

        Jetif是一个用纯Java实现的回归测试框架。它为Java程序单元测试以及功能测试提供了一个简单而且可 伸缩的架构,可以用于个人开发或企业级开发的测试。它容易使用,功能强大,而且拥有一些企业级测试的 重要功能。有几个基本的概念来自于JUnit,比如说断言机制,Test Listener的概念,因此从JUnit转到Jetif是非常容易的。

资料

1、Jetif的API文档

2、Jetif的代码下载(包括源代码)

Jetif 对比 JUnit + JTestCase

JUnit是一个很好的回归测试框架,但是由于它“没有参数,没有返回值”的设计, 很多人把测试数据编写在程序里。如果你想修改测试数据,就不得不重新编译你的代码。 当然现在有很多办法可以在JUnit中分离代码和数据,比如通过ResourceBundle或者Properties文件, 或者使用JTestCase这样的扩展,但是由于JUnit核心不支持,所以这些方法用起来都有些许困难,因此有很多局限性。
请参考JUnit Recipes获取更多关于在JUnit中分离数据和代码 的方法。

Jetif是一个设计为解决这些问题的回归测试框架,它不是一个JUnit扩展。他从核心上解决上述问题,所以你可以通过使用Jetif创建更加简洁的代码。

特性比较

下表中比较了Jetif和JUnit + JTestCase的特性差别。

特性 Jetif JUnit + JTestCase
代码数据分离 支持 通过JTestCase或其他方式支持
参数和返回值 支持 不支持
日志 支持 通过扩展支持
数据类型 有限支持,可被用户扩展 通过JTestCase有限支持
客户/服务器测试 支持 通过扩展支持

代码比较

通过Jetif,你可以创建更加简洁的测试代码,因为Jetif支持测试方法中的参数和返回类型。例如,使用Jetif可以写出一个下面这个样子的测试方法:

public boolean testSomething(float param1, String[] param2, Integer param3){
	// Test something with the param1, param2, param3
	return true;
} 

但是用JUnit + JTestCase,一个测试方法只能写成下面这个样子:

public void testSomething() {
	// get the test cases from XML
    Vector testCases = _jtestcase.getNameOfTestCases("testSomething");
    // for each test case
    for (int i=0; i<testCases.size(); i++) {
        // retrieve name of test case
        String testCase = (String)testCases.elementAt(i);

        // get hashed params for this test case
        Hashtable params = _jtestcase.getTestCaseParams("testCalculate", testCase);
        int var1 = ((Integer)params.get("var1")).intValue();
        String var2 = (String)params.get("var2");
            
        // Now comes to what we need to test.
    }
}

通过Jetif你可以在spec文件中定义参数和返回值,然后在测试程序中直接把它们用作参数并且返回一个你想要的结果。这种方式更加简单清晰,不是吗?

数据定义比较

Jetif不仅仅会让你的程序更简单,而且会让你的测试数据用更清晰的结构组织。下面是配合上述测试方法的Method Spec例子:

<method name="testSomething">
    <param>42.0</param>
    <param handler="array">value1, value2, value3</param>
    <param>32</param>
    <expected>true</expected>
</method>

但是如果用JUnit + JTestCase,你需要给测试方法定一个更加复杂的数据结构,例如:

<method name="method name" test-case="name your test case here">
  <params>
    <param type="java.util.Hashtable" key-type="java.lang.String">
      <param name="Test1" type="java.util.Hashtable" key-type="java.lang.String" value-type="java.lang.String">
        <param name="k1">value1</param>
        <param name="k2">value2</param>
        <param name="k3">value3</param>
      </param>
    <param name="k1" type="java.lang.String">value1</param>
    <param name="k2" type="java.lang.Integer">42</param>
    </param>
  </params>
</method>

多变的数据类型

Jetif和JTestCase都缺省支持有限数目的数据类型,但是Jetif提供了Object Handler机制让用户可以创建他们自己的处理器(handler)来支持各种数据类型。

抱歉!评论已关闭.