点滴

IT博客 首页 新随笔 联系 聚合 管理
  103 Posts :: 81 Stories :: 50 Comments :: 0 Trackbacks

Need more material about testing Mail me:      AncenChen@gmail.com

Junit 的入门

     

对于 Junit 的优点这里就不一一描述了。觉得最重要的一点是软件代码和测试代码分开; Junit 是开源产品,可以进行二次开发,所以觉得 Junit 扩展性会比较好吧!

Junit 的安装

Junit 的安装还是很简单的,直接将 Junit3.8.3 放在一个目录下,现在假社这个目录为 D:\Junit3.8.1, 那么我们就在 CLASSPATH 中添加 D:\Junit3.8.1\Junit.jar 这个路径就可以使用了。当然如果你在其他目录那么相应路径就是    : 其他目录: \ Junit3.8.1\Junit.jar

 

接下来谈下 Junit 框架的组成,

Junit TC                          测试目标与测试方法的集合

TS TestSuite                测试包

TR TestTusult               测试结果的描述

Test Listener                测试实践监听者

Test Failure                 测试过程中出现的与预期不一致的地方

AssertionFailedError   测试过程中出现的异常

Junit 的各种断言:

1 , assertEquals([String message],

                    expected,

                    actual)

这是使用得最多的断言形式。

expected -是你的期望值(通常要硬编码)

actual -被测代码实际产生的值

message -可选的消息,如果提供的话,将会在发生错误的时候报告这个消息。

2 , assertNull([String message],java.lang.Object object)

assertNotNull([String message],java.lang.Object object)

验证一个给定的对象是否为 Null (或者为非 Null ),如果答案为否,则将会失败。 message 参数是可选的。

3 , assertSame( [String message],

                    expected,

                    actual)

验证 expected 参数和 actual

参数所引用的是否为同

一对象,如果不是的

话,将会失败。 Message

参数是可选的。

4 , assertTrue( [String message],boolean condition)

验证给定的二元条件是否为真,如果为假的话,将会失败。 Message 参数是可选的。

assertFalse( [String message],boolean condition)

验证给定的二元条件是否为假,如果不为假的话,将会失败。 Message 参数是可选的

5 , fail( String message )

使测试立即失败,其中 message 参数使可选的。

这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)

 

 

首先,第一行的 import 声明引入了必须的 junit 类。

定义一个类,从 TestCase 继承下来

定义一个构造函数

测试类中包含名为 test…… 的方法

 

Junit 的框架

import junit.framework.*;                     

 

    

public class TestSimple extends TestCase{

punlic TestSimple (String name){

super(name);}

public void testAdd(){

assertEquals(2,1+1);

}

 

 

JUnit 中常用的接口和类:

Test 接口 —— 运行测试和收集测试结果

TestCase 抽象类 —— 定义测试中固定方法

Assert 静态类 —— 一系列断言方法的集合

TestSuite 测试包类 —— 多个测试的组合

TestResult 结果类和其它类与接口

一些使用 JUnit 经验 :

 

不要用 TestCase 的构造函数初始化,而要用 setUp() 和 tearDown() 方法。

不要依赖或假定测试运行的顺序,因为 JUnit 利用 Vector 保存测试方法。所以不同的平台会按不同的顺序从 Vector 中取出测试方法。

避免编写有副作用的 TestCase 。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。

当继承一个测试类时,记得调用父类的 setUp() 和 tearDown() 方法。
将测试代码和工作代码放在一起,一边同步编译和更新。

测试类和测试方法应该有一致的命名方案。如在工作类名前加上 test 从而形成测试类名。

确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。

如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的 Locale 进行测试。

尽可能地利用 JUnit 提供地 assert/fail 方法以及异常处理的方法,可以使代码更为简洁。

测试要尽可能地小,执行速度快

 Junit 的扩展:

  JUnit + HttpUnit=WEB 功能测试工具
JUnit + hansel =
代码覆盖测试工具
JUnit + abbot =
界面自动回放测试工具
JUnit + dbunit =
数据库测试工具
JUnit + junitperf=
性能测试工具

 

现在来实践一下吧! Junit 应用举例:

public class Money {

    private int fAmount;// 余额

    private String fCurrency;// 货币类型

    public Money(int amount, String currency) {

        fAmount= amount;

        fCurrency= currency;

    }

    public int amount() {

        return fAmount;

    }

    public String currency() {

        return fCurrency;

    }

    public Money add(Money m) {// 加钱

        return new Money(amount()+m.amount(), currency());

    }

    public boolean equals(Object anObject) {// 判断钱数是否相等

        if (anObject instanceof Money) {

            Money aMoney= (Money)anObject;

            return aMoney.currency().equals(currency())

                && amount() == aMoney.amount();

        }

        return false;

    }   

}

测试程序:

import junit.framework.*;

public class MoneyTest extends TestCase {//TestCase 的子类

    private Money f12CHF;// 提取公用的对象

    private Money f14CHF;  

    protected void setUp() {// 初始化公用对象

        f12CHF= new Money(12, "CHF");

        f14CHF= new Money(14, "CHF");

    }

    public void testEquals() {// 测试 equals 方法的正确性

        Assert.assertTrue(!f12CHF.equals(null));

        Assert.assertEquals(f12CHF, f12CHF);

     &

posted on 2006-08-10 09:50 天空 阅读(306) 评论(0)  编辑 收藏 引用 所属分类: 他人的测试总结
只有注册用户登录后才能发表评论。