点滴

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 天空 阅读(225) 评论(0)  编辑 收藏 引用 所属分类: 他人的测试总结
只有注册用户登录后才能发表评论。