软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>单元测试>>正文
java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(二)
文章出处:http://blog.51testing.com/ 作者:不详 发布时间:2005-11-21

之后,我们创建一个junit测试代码MoneyTest.java,来测试Money.javaMoneyBag.java类,这里我也把它放在src目录下;如果企业应用,你就要把目录分析的详细些,例如src子目录下放所有的java源代码,test子目录下放所有的junit测试代码:

import junit.framework.*;

public class MoneyTest extends TestCase {

private Money f12CHF;

private Money f14CHF;

private Money f7USD;

private Money f21USD;

private IMoney fMB1;

private IMoney fMB2;

public static void main(String args[]) {

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

}

protected void setUp() {

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

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

f7USD= new Money( 7, "USD");

f21USD= new Money(21, "USD");

fMB1= MoneyBag.create(f12CHF, f7USD);

fMB2= MoneyBag.create(f14CHF, f21USD);

}

public void testBagMultiply() {

// {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}

IMoney expected= MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));

assertEquals(expected, fMB1.multiply(2));

assertEquals(fMB1, fMB1.multiply(1));

assertTrue(fMB1.multiply(0).isZero());

}

public void testBagNegate() {

// {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}

IMoney expected= MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));

assertEquals(expected, fMB1.negate());

}

public void testBagSimpleAdd() {

// {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}

IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));

assertEquals(expected, fMB1.add(f14CHF));

}

public void testBagSubtract() {

// {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}

IMoney expected= MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));

assertEquals(expected, fMB1.subtract(fMB2));

}

public void testBagSumAdd() {

// {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}

IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));

assertEquals(expected, fMB1.add(fMB2));

}

public void testIsZero() {

assertTrue(fMB1.subtract(fMB1).isZero());

assertTrue(MoneyBag.create(new Money (0, "CHF"), new Money (0, "USD")).isZero());

}

public void testMixedSimpleAdd() {

// [12 CHF] + [7 USD] == {[12 CHF][7 USD]}

IMoney expected= MoneyBag.create(f12CHF, f7USD);

assertEquals(expected, f12CHF.add(f7USD));

}

public void testBagNotEquals() {

IMoney bag= MoneyBag.create(f12CHF, f7USD);

assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));

}

public void testMoneyBagEquals() {

assertTrue(!fMB1.equals(null));

assertEquals(fMB1, fMB1);

IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));

assertTrue(fMB1.equals(equal));

assertTrue(!fMB1.equals(f12CHF));

assertTrue(!f12CHF.equals(fMB1));

assertTrue(!fMB1.equals(fMB2));

}

public void testMoneyBagHash() {

IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));

assertEquals(fMB1.hashCode(), equal.hashCode());

}

public void testMoneyEquals() {

assertTrue(!f12CHF.equals(null));

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

assertEquals(f12CHF, f12CHF);

assertEquals(f12CHF, equalMoney);

assertEquals(f12CHF.hashCode(), equalMoney.hashCode());

assertTrue(!f12CHF.equals(f14CHF));

}

public void testMoneyHash() {

assertTrue(!f12CHF.equals(null));

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

assertEquals(f12CHF.hashCode(), equal.hashCode());

}

public void testSimplify() {

IMoney money= MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));

assertEquals(new Money(54, "CHF"), money);

}

public void testNormalize2() {

// {[12 CHF][7 USD]} - [12 CHF] == [7 USD]

Money expected= new Money(7, "USD");

assertEquals(expected, fMB1.subtract(f12CHF));

}

public void testNormalize3() {

// {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]

IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));

Money expected= new Money(4, "USD");

assertEquals(expected, fMB1.subtract(ms1));

}

public void testNormalize4() {

// [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]

IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));

Money expected= new Money(-3, "USD");

assertEquals(expected, f12CHF.subtract(ms1));

}

public void testPrint() {

assertEquals("[12 CHF]", f12CHF.toString());

}

public void testSimpleAdd() {

// [12 CHF] + [14 CHF] == [26 CHF]

Money expected= new Money(26, "CHF");

assertEquals(expected, f12CHF.add(f14CHF));

}

public void testSimpleBagAdd() {

// [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}

IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));

assertEquals(expected, f14CHF.add(fMB1));

}

public void testSimpleMultiply() {

// [14 CHF] *2 == [28 CHF]

Money expected= new Money(28, "CHF");

assertEquals(expected, f14CHF.multiply(2));

}

public void testSimpleNegate() {

// [14 CHF] negate == [-14 CHF]

Money expected= new Money(-14, "CHF");

assertEquals(expected, f14CHF.negate());

}

public void testSimpleSubtract() {

// [14 CHF] - [12 CHF] == [2 CHF]

Money expected= new Money(2, "CHF");

assertEquals(expected, f14CHF.subtract(f12CHF));

}

}

二、编写ant文件自动运行java单元测试

之后,我们在sinky目录下,创建一个build.xml文件,完成它的编译和测试任务,这里我为build.xml文件加了注释,供大家参考:

<!—build的项目名称叫money_demo,默认执行的任务是compile,根目录指当前目录,也就是sincky文件夹 -->

<project name="money_demo" default=" compile " basedir=".">

<description>

moneytest build file

</description>

<!—定义一个属性src,指向src目录-->

<property name="src" location="src"/>

<!—定义一个属性build,指向build目录,这个目录放置所有的编译后class文件,该目录目前没有创建-->

<property name="build" location="build"/>

<!—定义一个buildclasspath,里边放置后边任务里需要的依赖库和依赖路径-->

<path id="build.classpath">

<pathelement path="${ant.home}/lib/junit.jar"/>

<pathelement path="${build}"/>

</path>

<!--构建编译任务,先创建build文件夹,之后将srcdir里的java文件编译到build目录里-->

<target name="compile" >

<mkdir dir="${build}"/>

<javac srcdir="${src}" destdir="${build}"/>

</target>

<!--运行junit测试,运行的是MoneyTest,该运行依赖于build.classpath定义的路径 -->

<target name="test">

<java classname="MoneyTest" fork="yes">

<classpath refid="build.classpath"/>

</java>

</target>

<!--删除build文件夹的任务-->

<target name="clean">

<delete dir="${build}"/>

</target>

</project>

之后,我们开始运行build文件,开始编译任务:打开cmd命令行,进入sincky文件夹下,执行ant命令,会看见类似下列内容的效果:

C:cloversincky>ant

Buildfile: build.xml

compile:

[mkdir] Created dir: C:cloversinckybuild

[javac] Compiling 4 source files to C:cloversinckybuild

BUILD SUCCESSFUL

Total time: 4 seconds

现在你会在sincky目录下发现多了一个build目录,进入build目录,看见里边编译好的4class文件,恭喜你,这个任务胜利完成!

下面我们来运行单元测试任务:

C:cloversincky>ant test

Buildfile: build.xml

test:

[java] ......................

[java] Time: 0.016

[java] OK (22 tests)

BUILD SUCCESSFUL

Total time: 1 second

可以通过结果看出,22个测试用例全部通过;junit里边测试通过是.表示,测试失败是.F表示。关于ant的命令帮助,你可以输入ant –h查看。


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

Google提供的广告