`
董宗磊
  • 浏览: 64486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

junit3.8基础使用

阅读更多

 

最近这几天正在学习 junit junit 在我们日常的开发工作会发挥很大的作用,但是在使用 junit 的过程中如何写出正确的测试用例,也是一个很有技巧的事情,有的时候对于一个类中的某个方法写测试用例,一个方法要写出几个测试用例,这样才能保证从各个方面对于该方法做出测试,保证程序的正确性。

同时,现在的 junit 也出现了分裂的局面,比较重要的两个版本是 junit3.8 junit4.X ,这两个版本中 junit 的实现和使用都存在着很大的区别,其中 junit4.X 中主要是使用 Annotation 来实现,现在主要介绍 junit3.8 的使用:

 

Largest.java 这个类中的 getLargest 方法主要是获取一个整型数组中的最大值:

 

package com.junit;

/**

  *

  * <p>

  * Title: 获取一个整形数组中最大的数

  * </p>

  * <p>

  * Description:

  * </p>

  * @version 1.0

  * @author 董宗磊

  * @date 2012-2-9

  */

public class Largest {

 

    public int getLargest(int array[]) throws Exception{

        if(null == array || 0 == array.length){

            throw new Exception(" 数组不能为空 ");

        }

        int result = array[0];

        for (int i = 0; i < array.length; i++) {

            if(result < array[i]){

                result = array[i];

            }

        }

        return result;

    }

}

 

LargestTest.java 中的方法用来测试 Largest.java 中的 getLargest 方法的正确性:

 

package com.junit;

 

import junit.framework.Assert;

import junit.framework.TestCase;

/**

  *

  * <p>

  * Title: Largest 类的 junit 测试类

  * </p>

  * <p>

  * Description:

  * </p>

  * @version 1.0

  * @author 董宗磊

  * @date 2012-2-9

  */

public class LargestTest extends TestCase {

 

    private Largest largest;

   

    @Override

    public void setUp(){

        largest = new Largest();

    }

    /**

      * 测试正常执行结果是否正确

      */

    public void testGetLargest(){

        int array[] = {10,29,89,37,76};

        int result = 0;

        try {

            result = largest.getLargest(array);

        } catch (Exception e) {

            Assert.fail(" 测试失败 ");

        }

        assertEquals(89, result);

    }

    /**

      * 测试数组内没有内容时的异常情况

      */

    public void testGetLargest2(){

        Throwable tw = null;

        int array[] = {};

        try {

            largest.getLargest(array);

            Assert.fail(" 测试失败 ");

        } catch (Exception e) {

            tw = e;

        }

        Assert.assertNotNull(tw);

        Assert.assertEquals(Exception.class, tw.getClass());

        Assert.assertEquals(" 数组不能为空 ", tw.getMessage());

    }

    /**

      * 测试数组为空的异常情况

      */

    public void testGetLargest3(){

        Throwable tw = null;

        int array[] = null;

        try {

            largest.getLargest(array);

            Assert.fail(" 测试失败 ");

        } catch (Exception e) {

            tw = e;

        }

        Assert.assertNotNull(tw);

        Assert.assertEquals(Exception.class, tw.getClass());

        Assert.assertEquals(" 数组不能为空 ", tw.getMessage());

    }

   

    public static void main(String[] args) {

        junit.textui.TestRunner.run(LargestTest.class);

        junit.awtui.TestRunner.run(LargestTest.class);

        junit.swingui.TestRunner.run(LargestTest.class);

        }

}

 

在这个 junit 的测试类中我们只是对于一个类中的一个方法进行测试,其中 testGetLargest 方法主要测试在正常的情况,数组存在且不为空的情况下是否可以正确的查找出数组中最大的那个数; testGetLargest2 这个方法主要测试在数组存在但是数组中没有内容的情况下,是否可以正常的抛出异常; testGetLargest3 这个方法中主要是测试数组为空的情况下是程序是否可以正常的抛出异常。通过这个小程序我们可以看出,我们只是写一个很小的应用,但是却要对这个方法写出三个测试方法进行全面的测试,所以从这里我们可以看出,编写测试用例也是一项工作量很大的事情。

 

对于使用 junit3.8 编写测试用例的时候需要有几点需要注意的事情:

1)     编写的测试方法需要以 test 开头,这样 junit3.8 就可以识别这是一个测试方法,执行测试程序,如果不以 test 开头则 junit 默认不会当做测试方法来执行。

2)     编写的测试方法不能带有参数。

3)     编写的测试方法不能有返回值,返回值为 void

4)     编写的测试方法应该是 public

5)     编写的测试类必须要继承于 TestCase 父类

以上这几条规则是 junit3.8 中一些强制性的规定,但是我们在使用 junit3.8 时还有一些最佳的实践,这些虽不是 junit3.8 的强制性规定,但是却可以提高我们的工作效率:

1) 新建一个名为 test source folder ,用于存放测试类源代码

2) 目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们       位于同一个包下面

3) 测试类的命名规则:假如目标类是 Calculator ,那么测试类应该命名为 TestCalculator 或者是 CalculatorTest

分享到:
评论

相关推荐

    Spring API

    8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1...

    Spring中文帮助文档

    8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1...

    Maven权威指南 很精典的学习教程,比ANT更好用

    使用Maven Dependency插件进行优化 8.6. 最终的POM 8.7. 小结 II. Maven Reference 9. 项目对象模型 9.1. 简介 9.2. POM 9.2.1. 超级POM 9.2.2. 最简单的POM 9.2.3. 有效POM 9.2.4. 真正的POM 9.3. ...

    mysql官方中文参考手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MYSQL中文手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置...

    MySQL 5.1参考手册中文版

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置...

    MySQL 5.1参考手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MySQL 5.1中文手冊

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MySQL 5.1参考手册 (中文版)

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MySQL5.1参考手册官方简体中文版

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MySQL 5.1官方简体中文参考手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    Spring攻略(第二版 中文高清版).part2

    13.1 用JUnit and TestNG创建测试 504 13.1.1 问题 504 13.1.2 解决方案 504 13.1.3 工作原理 504 13.2 创建单元测试和集成测试 509 13.2.1 问题 509 13.2.2 解决方案 509 13.2.3 工作原理 510 13.3...

    Spring攻略(第二版 中文高清版).part1

    13.1 用JUnit and TestNG创建测试 504 13.1.1 问题 504 13.1.2 解决方案 504 13.1.3 工作原理 504 13.2 创建单元测试和集成测试 509 13.2.1 问题 509 13.2.2 解决方案 509 13.2.3 工作原理 510 13.3...

    mysql5.1中文手册

    显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用...

    Java学习笔记-个人整理的

    {3.8}内部类}{77}{section.3.8} {4}Collection}{80}{chapter.4} {4.1}\ttfamily java.util.ArrayList}{80}{section.4.1} {4.2}\ttfamily java.util.LinkedList}{81}{section.4.2} {4.3}贪吃蛇案例}{82}{section...

Global site tag (gtag.js) - Google Analytics