软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>单元测试>>正文
JBuilder单元测试实例
文章出处:转载 作者:TestWin 转载 发布时间:2005-10-19

当我们建立了一个类时,我们可以为它建立一个单元测试。为建立一个有意义的测试实例,通常开始询问您要使用何种类型的类,然后编写代码,进行单元测试——回归的独立测试。
实际上有许多种方法使用新的money类,这里我们将执行两个测试实例。我们讨论的两个测试(testAddMoney101()和testEquals())将足以演示如何建立单元测试。


1 JUnit
单元测试并不是新的概念。而新的是Borland JBuilder支持面向对象、开放源代码的测试框架。测试框架的Java 版本是众所周知的JUnit。
JUnit是编写重复测试的简单框架。它是单元测试框架中的一个xUnit框架的实例。您可以从

http://junit.sourceforge.net

http://www.junit.org

中了解更多关于该框架的信息。
在我们建立第一个测试实例前,我们需要了解所有测试实例都来自于TestCase类。为写出正确的测试实例,您的类将需要以下代码。

import junit.framework.*
public class TestMoney101 extends TestCase {

public TestMoney101(String s) {
super(s);
}

protected void setUp() {
}

protected void tearDown() {
}

}

建立TestMoney101的构造函数(constructor)接受建立的参数,并把它传到父类。setUp()和tearDown()成员函数的支持提供给您建立和取消所需建立一个成功的测试和报告的任何准备活动。我们将稍后展示如何使用这些成员函数建立一个可重用的测试框架。
2 增加特殊测试
一旦我们提供了一个基本的TestCase 签名,我们就能建立我们的第一个测试实例。请增加以下代码到TestMoney101。

public void testAddMoney101() {
Money101 m12EUR = new Money101(12, "EUR"); // (1)
Money101 m14EUR = new Money101(14, "EUR"); // (1)
Money101 expected = new Money101(26, "EUR");
Money101 result = m12EUR.addMoney101(m14EUR); // (2)
Assert.assertTrue(expected.equals(result)); // (3)
}

测试方法testAddMoney101() 将:
(1)建立被测试对象;
(2)调用一个测试的成员函数(addMoney101());
(3)调用另一个成员函数(equals()),并校验结果(Assert.assertTrue())。
所有用户指定的成员函数执行惟一的测试,且操作必须是public类型。
我们将在测试类中加入等式测试,相应的代码如下:

public void testEquals() {
Money101 m12EUR = new Money101(12, "EUR");
Money101 m14EUR = new Money101(14, "EUR");
Assert.assertTrue(!m12EUR.equals(null));
Assert.assertTrue(m12EUR.equals(m12EUR));
Assert.assertTrue(m12EUR.equals(new Money101(12, "EUR")));
Assert.assertTrue(!m12EUR.equals(m14EUR));
}

我们再次依赖Assert 类来报告相关错误条件。现在我们有时间来检查Assert的能力。
3 使用断言(Assert)
开发人员熟悉其他编程环境通常的断言概念。例如,在C和C++中,assert()宏是常常用来测试一个正确的结论到一个潜在问题的操作。在JUnit中,您可以直接从测试实例中调用任何Assert方法,因为TestCase 是Assert的子类。
不像C和C++语言中assertion 宏的发现,Assert类–被定义和应用为junit.framework.Assert,具有的功能如下所示。
Assert.assertEquals
Assert.assertNotNull
Assert.assertNull
Assert.assertSame
Assert.assertTrue
Assert.fail
除fail成员函数外,上述所有其他符号重载的函数将执行一个测试,来决定是否产生错误信息。相反,直接调用fail将通过Assert.fail(String)或Assert.fail()通知Assert为fail。
在Assert类中有许多方法,每个设计执行一个断言都有所不同。这些方法中的任何一个都触发测试失败。
为浏览junit.framework.Assert中的不同方法,在编辑器中打开一个测试实例,在结构面板上双击TestCase 父类,然后双击它的父类Assert。
4 使用setUp()和tearDown()
我们能在测试实例中使用setUp和tearDown方法,以减少重复代码。在任何测试函数前后,setUp和tearDown方法都应被调用。测试类的代码如下:

public class TestMoney extends TestCase {
Money101 f12EUR;
Money101 f14EUR;

public TestMoney101(String s) {
super(s);
}protected void setUp() {
// set up the fixture
f12EUR = new Money101(12, "EUR");
f14EUR = new Money101(14, "EUR");
}

protected void tearDown() {
}public void testAddMoney101() {
Money101 expected = new Money101(26, "EUR");
Money101 result = f12EUR.addMoney101(f14EUR);
Assert.assertTrue(expected.equals(result));
}public void testEquals() {
Assert.assertTrue(!f12EUR.equals(null));
Assert.assertTrue(f12EUR.equals(f12EUR));
Assert.assertTrue(f12EUR.equals(new Money101(12, "EUR"));
Assert.assertTrue(!f12EUR.equals(f14EUR));
}

}

5 测试集
测试实例可以被集成为测试集。顶层的测试集应该包含其他所有的测试实例和(或)测试集。
测试实例和测试集都是TestCase 的扩展并执行Test 接口。测试实例和测试集惟一的区别是测试实例包含单独的测试方法,而测试集通常用来组织其他单元实例到一个逻辑的组中,并把它们作为组来运行。测试集可以调用任何测试实例或测试集。
有两种方法执行测试集,分别为:静态和动态。在静态和动态测试中,您都必须提供一个静态方法建立测试集。
5.1 建立动态测试
有两种方法建立动态测试实例。第一种方法不仅允许您动态地实例化Test,也可以允许您动态地为正在运行的测试实例加入单独的测试。相应的代码如下:

public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new TestMoney101("testEquals"));
suite.addTest(new TestMoney101("testAddMoney"));
return suite;
}

suite()函数返回一个Test的接口,此接口是被动态建立的。每个测试方法都可以被单独增加。
我们不仅可以单独增加每个测试到动态实例,而且可以使用符合字符串的构造函数,相应的代码如下:

public static Test suite() {
return new testSuite(TestMoney101.class);
}

5.2 建立静态测试
这是使用静态Test建立同样功能的代码。

public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new TestMoney101("money equals") {
protected void runTest() { testEquals(); }
});
suite.addTest(new TestMoney101("money add") {
protected void runTest() { testAddMoney101(); }
});
return suite;
}

5.3 JBuilder界面
在JBuilder中使用Test Runner的这些测试输出样式如下图所示。

JBuilder中提供了3种test runner 的类型。每个test runner 对应一个特定的用户界面。
JUnit Text UI
JUnit Swing UI
JUnit Awt UI
您可以选择【Project】→【Properties】命令或【Run】→【Configurations】命令中Run面板,在其中选择Test Runner。每个Test Runner都由Borland JBuilder 集成到测试框架中。
如果测试失败,将以一个红色小球作为标记。在 JBuilder 中双击该测试方法,您可以直接看到其源代码。
更多信息请查看《JBuilder精髓》一书。


站内搜索
相关文章
◎使用Rational Software Architect
◎怎样使用Junit Framework进行单元测试的编写
◎“白盒”静动测试两齐全
热门文章
◎全面介绍单元测试
◎单元测试------理论篇
◎Java内存泄漏分析
◎单元测试作业指导书(一)
◎白盒测试中的六种覆盖方法
◎junit实现过程
◎JUnit起步
◎单元测试方法
◎C/C++单元测试问答(摘要)
◎单元测试的基本方法
◎nunit使用资料
◎如何挑选白盒测试工具
◎NUnit快速入门
◎在Eclipse中使用JUnit
◎Java的内存泄漏
◎单元测试的小技巧介绍和举例
◎Linux:让内存不再泄漏
◎单元测试指导
◎为什么要进行单元测试?
◎单元测试作业指导书(二)
◎“白盒”静动测试两齐全
◎数据库程序的单元测试
◎静态测试
◎CppUnit - 测试驱动开发入门
◎ant结合junit进行软件自动测试
◎用cppUnit进行单元测试的步骤
◎单元测试浅析
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎java的单元自动化测试---jtest
◎单元测试作业指导书(三)
◎单元测试作业指导书(四)
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(三)
◎使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Te...
◎C语言单元测试框架-Check
◎EasyMock与JMock的比较
◎JUnit中如何测试异常
◎Java程序的单元测试
◎J2EE应用的性能调整--JPROBE使用篇
◎怎样使用Junit Framework进行单元测试的编写
◎单元测试和事先测试开发
◎使用NUnit在.Net编程中进行单元测试
◎单元测试实践(VB版)
◎感悟测试驱动开发
◎C语言高效编程的的四招技巧
◎软件测试技术获重大突破
◎有关Junit的多线程测试
◎使用ant编译、运行junit、以及检查编码
◎强化Visual Studio单元测试
◎JCoverage使用
◎让编译和测试过程自动化

Google提供的广告