转载《使用NetBeans开发JUnit测试》.docx

上传人:b****5 文档编号:8583625 上传时间:2023-01-31 格式:DOCX 页数:23 大小:155.47KB
下载 相关 举报
转载《使用NetBeans开发JUnit测试》.docx_第1页
第1页 / 共23页
转载《使用NetBeans开发JUnit测试》.docx_第2页
第2页 / 共23页
转载《使用NetBeans开发JUnit测试》.docx_第3页
第3页 / 共23页
转载《使用NetBeans开发JUnit测试》.docx_第4页
第4页 / 共23页
转载《使用NetBeans开发JUnit测试》.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

转载《使用NetBeans开发JUnit测试》.docx

《转载《使用NetBeans开发JUnit测试》.docx》由会员分享,可在线阅读,更多相关《转载《使用NetBeans开发JUnit测试》.docx(23页珍藏版)》请在冰豆网上搜索。

转载《使用NetBeans开发JUnit测试》.docx

转载《使用NetBeans开发JUnit测试》

使用NetBeans开发工具编写JUnit测试

本文介绍在NetBeans开发工具中编写和运行JUnit单元测试的基础部分。

测试一个应用程序是开发周期的一部分,编写和维护单元测试可以保证你源代码中独立的方法可以正常工作。

NetBeans开发工具整合了对JUnit单元测试框架的支持,使得你可以简便,快捷的创建JUnit测试和测试套件。

在这个教程中你将为一个Java项目创建简单的JUnit3和JUnit4单元测试和测试套件。

第一部分展示了如何创建JUnit3测试,第二部分展示了如何在JUnit4中使用JUnit注释创建同样的测试。

因为测试都是一样的,所以不需要全部完成教程的这两部分。

但可以阅读一下这两个版本下的测试是如何编写的,这样你可以看到JUnit4中涉及的一些变化。

关于使用JUnit的更多信息,参考www.junit.org

内容

∙创建工程

o创建Java类库项目

∙编写JUnit3测试

o为Vectors.java创建一个测试用例

o为Vectors.java编写测试方法

o为Utils.java创建测试用例

o为Utils.java创建测试方法

o运行测试

∙编写JUnit4测试

o为Vectors.java创建一个测试用例

o为Vectors.java编写测试方法

o为Utils.java创建测试用例

o为Utils.java创建测试方法

o运行测试

∙创建JUnit测试套件

o创建JUnit3测试套件

o创建JUnit4测试套件

o运行测试套件

下面的教程你将会使用如下的软件和资源

NetBeansIDE

6.5,6.1or6.0

JavaDevelopmentKit(JDK)

version6orversion5

JUnitSampleSolProject

创建工程

为了完成这个教程,你首选要创建一个Java类库项目,名为JUnit-Sample。

创建Java类库工程

1.从主菜单选择文件>新建项目。

2.从Java类别中选择Java类库,点击下一步。

3.为项目输入JUnit-Sample并设置项目位置。

4.如果使用专用文件夹存储库选择被选,取消选择,点击下一步。

5.点击完成。

当你创建项目完毕,如果你查看项目的测试库节点,你会看到这个项目包含了JUnit3和JUnit4库。

IDE默认为新项目添加这两个库。

你第一次创建JUnit测试时,IDE提示你选择一个版本并移除不需要的库。

创建Java类

这个练习中你下载示例项目并复制文件Utils.java和Vectors.java到你创建的类库项目。

1.右键点击项目的源包节点,在弹出菜单选择新建>Java包。

2.输入sample作为包名。

点击完成。

3.下载并解压缩JUnitSampleSol项目,并在编译器中打开。

 

4.将JUnitSampleSol项目的源包中的Utils.java和Vectors.java 复制到JUnit-Sample项目中的sample源包。

如果你查看类的源代码,你可以看到Utils.java有三个方法(computeFactorial, concatWords,和 normalizeWord) Vectors.java有两个方法(equals 和 scalarMultiplication)。

下一步就是为每个类创建测试类并为这些方法编写测试用例。

编写JUnit3单元测试

在这部分教程中,你将为类Vectors.java和 Utils.java创建基础的JUnit3单元测试。

你将使用编译器创建基于项目类的测试类框架。

然后你修改这些生成的测试方法并添加新的测试方法。

编译器在你第一次为项目创建测试时会提示选择JUnit版本。

你选择的版本变为该项目默认的JUnit版本,编译器将之后的测试和测试套件都生成为该版本。

创建Vectors.java的测试类

在这个练习中你将创建Vectors.java的JUnit测试框架

1.右键点击Vectors.java选择工具>创建JUnit测试。

2.在选择JUnit版本对话框中选择JUnit3.x。

当你选择JUnit3.x编译器将从项目移去JUnit4库。

3.在创建测试对话框中将测试类名改为VectorsJUnit3Test。

当你修改测试类名时,你将会看到关于修改名称的警告。

默认的名字是基于你要测试的类名,在名称后加上Test。

例如,对于类MyClass.java,默认的测试类名是MyClassTest.java。

通常最好都保留默认名,但是在这个教程中你需要修改名字,因为你之后将在同一个包中创建JUnit4,测试类名必须是唯一的。

4.取消测试初始化函数和测试释放方法,选择确定。

当你点击确定,编译器在测试包sample目录中创建JUnit测试框架。

一个项目需要一个目录作为测试包去创建测试。

默认的测试包路径目录是项目的根级别,不过这也是依赖于你在项目属性中定义的不同的位置。

如果你用编辑器查看生成的类VectorsJUnit3Test.java,你会看到编译器生成了下面的测试类,和对应方法 equal和scalarMultiplication的测试方法。

publicclassVectorsJUnit3TestextendsTestCase{

/**

*Testofequalmethod,ofclassVectors.

*/

publicvoidtestEqual(){

System.out.println("equal");

int[]a=null;

int[]b=null;

booleanexpResult=false;

booleanresult=Vectors.equal(a,b);

assertEquals(expResult,result);

//TODOreviewthegeneratedtestcodeandremovethedefaultcalltofail.

fail("Thetestcaseisaprototype.");

}

/**

*TestofscalarMultiplicationmethod,ofclassVectors.

*/

publicvoidtestScalarMultiplication(){

System.out.println("scalarMultiplication");

int[]a=null;

int[]b=null;

intexpResult=0;

intresult=Vectors.scalarMultiplication(a,b);

assertEquals(expResult,result);

//TODOreviewthegeneratedtestcodeandremovethedefaultcalltofail.

fail("Thetestcaseisaprototype.");

}

}

每个生成的测试方法体都按图所示单独提供,它需要被修改后才能成为一个真正的测试用例。

如果你不需要自动生成代码,你可以在创建测试对话框中取消缺省方法主题选项。

当编译器生成测试方法名时,每个方法名都是在之前加上了test,因为JUnit3使用命名规范和反射识别测试。

为了能识别测试方法每个测试方法都需要按照语法test

在JUnit4中就不需要使用这种测试方法命名语法,因为你可以使用标签识别测试方法,并且测试类也不需要继承于TestCase。

编写Vectors.java测试方法

在这个练习中你修改生成的测试方法,使得他们能运行测试并修改默认输出消息。

你不需要为了运行测试而修改输出消息,但你也许想修改输出以帮助识别在JUnit测试结果输出窗口中显示的结果。

1.在编辑器中打开VectorsJUnit3Test.java。

2.修改testScalarMultiplication的测试框架,修改println的值并且移去生成的值。

测试方法应该按照下面所示:

publicvoidtestScalarMultiplication(){

System.out.println("*VectorsJUnit3Test:

testScalarMultiplication()");

assertEquals(expResult,result);

}

3.现在添加一些断言用以测试方法。

publicvoidtestScalarMultiplication(){

System.out.println("*VectorsJUnit3Test:

testScalarMultiplication()");

assertEquals(0,Vectors.scalarMultiplication(newint[]{0,0},newint[]{0,0}));

assertEquals(39,Vectors.scalarMultiplication(newint[]{3,4},newint[]{5,6}));

assertEquals(-39,Vectors.scalarMultiplication(newint[]{-3,4},newint[]{5,-6}));

assertEquals(0,Vectors.scalarMultiplication(newint[]{5,9},newint[]{-9,5}));

assertEquals(100,Vectors.scalarMultiplication(newint[]{6,8},newint[]{6,8}));

}

这个测试方法使用JUnit的assertEquals 方法.。

使用这个断言,你要提供输入变量和期待结果。

要通过测试,测试方法必须在运行中基于提供的变量成功返回所有的期待结果。

你需要添加足够数量的断言以覆盖各种情况的组合。

4.修改testEqual 测试骨架,删除生成的方法体并添加如下println。

System.out.println("*VectorsJUnit3Test:

testEqual()");

测试方法现在看起来如下所示:

publicvoidtestEqual(){

System.out.println("*VectorsJUnit3Test:

testEqual()");

}

5.修改testEqual方法,添加如下断言:

publicvoidtestEqual(){

System.out.println("*VectorsJUnit3Test:

testEqual()");

assertTrue(Vectors.equal(newint[]{},newint[]{}));

assertTrue(Vectors.equal(newint[]{0},newint[]{0}));

assertTrue(Vectors.equal(newint[]{0,0},newint[]{0,0}));

assertTrue(Vectors.equal(newint[]{0,0,0},newint[]{0,0,0}));

assertTrue(Vectors.equal(newint[]{5,6,7},newint[]{5,6,7}));

assertFalse(Vectors.equal(newint[]{},newint[]{0}));

assertFalse(Vectors.equal(newint[]{0},newint[]{0,0}));

assertFalse(Vectors.equal(newint[]{0,0},newint[]{0,0,0}));

assertFalse(Vectors.equal(newint[]{0,0,0},newint[]{0,0}));

assertFalse(Vectors.equal(newint[]{0,0},newint[]{0}));

assertFalse(Vectors.equal(newint[]{0},newint[]{}));

assertFalse(Vectors.equal(newint[]{0,0,0},newint[]{0,0,1}));

assertFalse(Vectors.equal(newint[]{0,0,0},newint[]{0,1,0}));

assertFalse(Vectors.equal(newint[]{0,0,0},newint[]{1,0,0}));

assertFalse(Vectors.equal(newint[]{0,0,1},newint[]{0,0,3}));

}

这个测试使用JUnit的assertTrue和assertFalse 方法测试各种可能的结果。

要这个测试通过,theassertTrue必须都为true,assertFalse必须都为false。

创建Utils.java测试类

现在你开始创建Utils.java的测试框架。

在你上一次练习中创建测试时,编译去会提示你选择JUnit版本,这次你不必再次选择。

1.右键点击Utils.java选择工具>创建JUnit测试。

2.如果测试初始化函数和测试释放方法未选,将其选择。

3.在创建测试对话框中修改测试类名为UtilsJUnit3Test 选择确定。

当你选择确定,编译器会在测试包>samples包中创建UtilsJUnit3Test.java测试文件。

你可以看到添加的对应Utils.java中方法的测试框架testComputeFactorial,,testConcatWords,和 testNormalizeWord,编译器还会创建测试方法初始化函数setUp和测试方法释放函数tearDown。

编写Utils.java测试方法

在这个练习中你添加一些通用的JUnit测试要素的测试用例。

你也要在方法内添加一个println,因为一些方法默认是没有任何输入的。

通过添加println你可以在JUnit测试结果窗口看到方法运行和运行的顺序。

测试测试初始化函数和测试释放方法

setUp和tearDown方法被用来初始化和释放测试条件。

testUtils.java并不需要这两个方法,但是留在这儿可以演示他们是如何工作的。

 

setUp方法是一个初始化方法,在测试类的每个测试用例之前运行。

测试并不强制要求有初始化函数,但是如果你需要在运行测试前初始化一些变量,你需要用到初始化函数。

tearDown方法是测试类中每个测试用例运行之后的释放方法。

测试并不强制要求有测试释放方法,但是如果你需要在运行测试之后释放数据,你需要用到测试释放方法。

1.按照下面进行修改,在每个方法里面添加println。

@Override

protectedvoidsetUp()throwsException{

super.setUp();

System.out.println("*UtilsJUnit3Test:

setUp()method");

}

@Override

protectedvoidtearDown()throwsException{

super.tearDown();

System.out.println("*UtilsJUnit3Test:

tearDown()method");

}

当你运行测试,每个println的文本会在JUnit测试结果输出窗口显示,如果你不添加println,没有任何输出展现出方法的运行。

使用一个简单断言进行测试

这个简单的测试用例测试了concatWords方法。

你将添加一个新的测试方法名为testHelloWorld,替代使用生成的测试方法testConcatWords ,这个方法使用一个简单断言测试方法是否成功拼接字符串。

这个测试用例中的assertEquals 使用语法assertEquals(EXPECTED_RESULT,ACTUAL_RESULT)测试期望结果是否等于实际结果。

这种情况下,如果concatWords方法的输入是"Hello",", ","world"and"!

",期望结果应该等于"Hello,world!

"。

1.删除生成的测试方法testConcatWords。

2.添加如下代码测试concatWords。

publicvoidtestHelloWorld(){

assertEquals("Hello,world!

",Utils.concatWords("Hello",",","world","!

"));

}

3.添加一个println语句在JUnit测试结果窗中显示相关测试文本。

publicvoidtestHelloWorld(){

System.out.println("*UtilsJUnit3Test:

testmethod1-testHelloWorld()");

assertEquals("Hello,world!

",Utils.concatWords("Hello",",","world","!

"));

使用Timeout进行测试

这个测试演示了如何测试一个需要消耗很多时间才能完成的方法。

如果方法消耗太久时间,测试线程会中断并且测试失败。

你可以在测试中定义时间限制。

测试方法调用了Utils.java中的computeFactorial方法。

你可以假设computeFactorial方法是正确的,但在这儿你希望测试计算是否能在1000毫秒内完成。

computeFactorial线程和一个测试线程同时被启动。

测试线程将在1000毫秒后停止并抛出一个TimeoutException除非computeFactorial线程。

你可以添加一个消息,如果TimeoutException 被抛出就显示这个消息。

1.删除生成的测试方法testComputeFactorial。

2.添加testWithTimeout方法,随机生成一个数字计算阶乘。

 

publicvoidtestWithTimeout()throwsInterruptedException,TimeoutException{

finalintfactorialOf=1+(int)(30000*Math.random());

System.out.println("computing"+factorialOf+'!

');

ThreadtestThread=newThread(){

publicvoidrun(){

System.out.println(factorialOf+"!

="+UputeFactorial(factorialOf));

}

};

}

3.添加你的导入项import java.util.concurrent.TimeoutException.

4.在方法中添加下面的代码,如果测试耗时过长,中断线程并显示消息。

ThreadtestThread=newThread(){

publicvoidrun(){

System.out.println(factorialOf+"!

="+UputeFactorial(factorialOf));

}

};

testThread.start();

Thread.sleep(1000);

testThread.interrupt();

if(testThread.isInterrupted()){

thrownewTimeoutException("thetesttooktoolongtocomplete");

}

}

你可以修改Thread.sleep行的毫秒数值。

5.添加下面的println在JUnit测试结果窗口中显示文本。

publicvoidtestWithTimeout()throwsInterruptedException,TimeoutException{

System.out.println("*UtilsJUnit3Test:

testmethod2-testWithTimeout()");

finalintfactorialOf=1+(int)(30000*Math.random());

System.out.println("computing"+factorialOf+'!

');

测试一个预期的异常

这个测试演示如何测试一个预期的异常。

如果没有抛出特定的预期的异常,这个方法就失败了。

这种情况下你测试computeFactorial方法在输入变量为负数(-5)时抛出IllegalArgumentException。

1.添加下面的testExpectedException方法以输入值-5调用computeFactorial。

publicvoidtestExpectedException(){

try{

finalintfactorialOf=-5;

System.out.println(factorialOf+"!

="+UputeFactorial(factorialOf));

fail("IllegalArgumentExceptionwasexpected");

}catch(IllegalArgumentExceptionex){

}

}

2.添加下面的println在JUnit测试结果窗口中显示文本。

publicvoidtestExpectedException(){

System.out.println("*UtilsJUnit3Test:

testmethod3-testExpectedException()");

try{

屏蔽一个测试

这个测试展示了如何临时屏蔽一个测试方法。

在JUnit3中,如果方法名不是以test开头,就不会被识别为测试方法。

所以你可以在测试方法前添加DISABLED以屏蔽它。

1.删除生成的测试方法testNormalizeWord。

2.添加下面的测试方法到测试类中。

publicvoidtestTemporarilyDisabled()throwsException{

System.out.println("*UtilsJUnit3Test:

t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1