您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
单元测试利器JUnit
作者:网络转载 发布时间:[ 2013/3/29 14:59:08 ] 推荐标签:

    参数化测试的编写稍微有点麻烦(当然这是相对于 JUnit 中其它特性而言):

    为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
    为测试类声明几个变量,分别用于存放期望值和测试所用数据。
    为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
    为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
   编写测试方法,使用定义的变量作为参数进行测试。
   我们按照这个标准,重新改造一番我们的单元测试代码:

Java代码 复制代码

    package com.ai92.cooljunit;  
     
    import static org.junit.Assert.assertEquals;  
     
    import java.util.Arrays;  
    import java.util.Collection;  
     
    import org.junit.Test;  
    import org.junit.runner.RunWith;  
    import org.junit.runners.Parameterized;  
    import org.junit.runners.Parameterized.Parameters;  
     
    @RunWith(Parameterized.class)  
    public class TestWordDealUtilWithParam {  
     
            private String expected;  
          
            private String target;  
          
            @Parameters 
            public static Collection words(){  
                    return Arrays.asList(new Object[][]{  
                    {"employee_info", "employeeInfo"},      //测试一般的处理情况  
                    {null, null},                           //测试 null 时的处理情况  
                    {"", ""},                               //测试空字符串时的处理情况  
                    {"employee_info", "EmployeeInfo"},      //测试当首字母大写时的情况  
                    {"employee_info_a", "employeeInfoA"},   //测试当尾字母为大写时的情况  
                    {"employee_a_info", "employeeAInfo"}    //测试多个相连字母大写时的情况  
                    });  
            }  
          
            /** 
            * 参数化测试必须的构造函数 
            * @param expected   期望的测试结果,对应参数集中的第一个参数 
            * @param target 测试数据,对应参数集中的第二个参数 
            */ 
            public TestWordDealUtilWithParam(String expected , String target){  
                this.expected = expected;  
                this.target = target;  
            }  
          
            /** 
            * 测试将 Java 对象名称到数据库名称的转换 
            */ 
            @Test public void wordFormat4DB(){  
                assertEquals(expected, WordDealUtil.wordFormat4DB(target));  
            }  
    } 

    很明显,代码瘦身了。在静态方法 words 中,我们使用二维数组来构建测试所需要的参数列表,其中每个数组中的元素的放置顺序并没有什么要求,只要和构造函数中的顺序保持一致可以了。现在如果再增加一种测试情况,只需要在静态方法 words 中添加相应的数组即可,不再需要复制粘贴出一个新的方法出来了。

JUnit 和 Ant

    随着项目的进展,项目的规模在不断的膨胀,为了保证项目的质量,有计划的执行全面的单元测试是非常有必要的。但单靠JUnit提供的测试套件很难胜任这项工作,因为项目中单元测试类的个数在不停的增加,测试套件却无法动态的识别新加入的单元测试类,需要手动修改测试套件,这是一个很容易遗忘得步骤,稍有疏忽会影响全面单元测试的覆盖率。

    当然解决的方法有多种多样,其中将 JUnit 与构建利器 Ant 结合使用可以很简单的解决这个问题。Ant —— 备受赞誉的 Java 构建工具。它凭借出色的易用性、平台无关性以及对项目自动测试和自动部署的支持,成为众多项目构建过程中不可或缺的独立工具,并已经成为事实上的标准。Ant 内置了对 JUnit 的支持,它提供了两个 Task:junit 和 junitreport,分别用于执行 JUnit 单元测试和生成测试结果报告。使用这两个 Task 编写构建脚本,可以很简单的完成每次全面单元测试的任务。

    不过,在使用 Ant 运行 JUnit 之前,您需要稍作一些配置。打开 Eclipse 项界面,选择 Ant -> Runtime 项(见图7),将 JUnit 4.1 的 JAR 文件添加到 Classpath Tab 页中的 Global Entries 设置项里。记得检查一下 Ant Home Entries 设置项中的 Ant 版本是否在 1.7.0 之上,如果不是请替换为新版本的 Ant JAR 文件。

图7 Ant Runtime 项

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