MyEclipse中使用Junit插件进行单元测试
使用JUnit进行Java单元测试和Web应用程序调试
![使用JUnit进行Java单元测试和Web应用程序调试](https://img.taocdn.com/s3/m/22f86ff988eb172ded630b1c59eef8c75ebf9540.png)
使用JUnit进行Java单元测试和Web应用程序调试JUnit是一种Java开发工具,可以用来进行单元测试和Web应用程序的调试。
JUnit在Java开发中非常重要,能够方便地测试Java应用程序的各种功能,发现问题并及时修复。
什么是单元测试?在编写Java应用程序时,我们写了很多小的代码片段,这些小片段被称为单元。
为了确保这些单元互相协调运作,我们需要进行测试,称为单元测试。
单元测试即在应用程序的每个单元上进行测试,以方便发现问题并迅速修复。
单元测试需要用到JUnit等测试工具。
在Java开发中,JUnit被广泛使用,并且是Java应用程序安全和可靠性的保证。
如何使用JUnit进行单元测试?安装JUnit通常,JUnit被打包为JAR文件,可以从其官方网站下载并安装。
安装完成后,需要配置环境变量,以便在Java开发中使用它。
在Linux操作系统中,可以通过apt-get命令或yum命令安装JUnit。
在Eclipse或IntelliJ等Java开发环境中,JUnit已经预装了。
编写测试用例在Java应用程序的单元测试中,需要编写测试用例。
一个测试用例对应一个功能,它包含输入,期望输出和具体操作过程。
例如,下面是一个测试用例:@Testpublic void testAdd() {Calculator calculator = new Calculator();int result = calculator.add(10, 20);assertEquals(30, result);}在这个测试用例中,我们测试了Calculator类的add方法,输入10和20,期望输出30。
如果add方法正确工作,测试将通过。
运行测试用例测试用例编写完成后,需要在JUnit上运行测试,以发现潜在问题。
在Eclipse和IntelliJ中,您可以右键单击测试代码,然后选择“运行单元测试”选项。
JUnit将开始运行测试,测试结果将在JUnit窗口中显示。
实验03.基本路径测试法和单元测试工具JUnit的使用
![实验03.基本路径测试法和单元测试工具JUnit的使用](https://img.taocdn.com/s3/m/9baec21f814d2b160b4e767f5acfa1c7aa008296.png)
实验报告
实验序号:03 实验项目名称:白盒测试工具JUnit的使用
学号122
姓名专业、班
实验地点实1-511 指导教师实验时间2013/4/18
一、实验目的
●掌握在Eclipse环境下JUnit单元测试工具的安装和使用方法;
●针对一个实际问题,在JUnit环境下设计并执行测试用例。
二、实验要求
●开发环境:Eclipse v3.7及以上版本;JUnit v4.10及以上版本;文本编辑软件。
●硬件要求:CPU PIV 以上,256M 内存,1G 硬盘空间。
●系统要求:Windows98/Me/XP/NT/2000,IE 5 以上。
三、实验内容与步骤
先将junit软件放入Eclipse安装目录下的plugins文件中,然后开始实验:
1、新建Java project命名...:
2、添加junit单元测试软件:
3、a、新建待测试类SaleMachine.java
b、新建Junit Test Case测试类SaleMachineTest.java:
C、对operation进行测试:d、
4、运行测试类(只测试一个用例),可以正确通过:
5、修改测试代码(添加新的测试用例),可以正确通过运行:
6、修改测试代码(添加第3个测试用例),运行出现错误:
7、查看错误提示:
8、根据错误修改代码:a、
b、
运行,任提示出错:
根据错误继续修改:a:
b:
运行,任提示出错:
继续修改错误:
a、
b、
9、修改完,运行测试代码,可以通过:。
在Eclipse中使用JUnit4进行单元测试(高级篇)
![在Eclipse中使用JUnit4进行单元测试(高级篇)](https://img.taocdn.com/s3/m/1c0e09ec0975f46527d3e199.png)
在Eclipse中使用JUnit4进行单元测试(高级篇)过前2篇文章,您一定对JUnit有了一个基本的了解,下面我们来探讨一下JUnit4中一些高级特性。
<!--[if !supportLists]-->一、<!--[endif]-->高级Fixture 上一篇文章中我们介绍了两个Fixture标注,分别是@Before 和@After,我们来看看他们是否适合完成如下功能:有一个类是负责对大文件(超过500兆)进行读写,他的每一个方法都是对文件进行操作。
换句话说,在调用每一个方法之前,我们都要打开一个大文件并读入文件内容,这绝对是一个非常耗费时间的操作。
如果我们使用@Before和@After,那么每次测试都要读取一次文件,效率及其低下。
这里我们所希望的是在所有测试一开始读一次文件,所有测试结束之后释放文件,而不是每次测试都读文件。
JUnit的作者显然也考虑到了这个问题,它给出了@BeforeClass 和 @AfterClass两个Fixture 来帮我们实现这个功能。
从名字上就可以看出,用这两个Fixture标注的函数,只在测试用例初始化时执行@BeforeClass方法,当所有测试执行完毕之后,执行@AfterClass进行收尾工作。
在这里要注意一下,每个测试类只能有一个方法被标注为@BeforeClass 或@AfterClass,并且该方法必须是Public和Static的。
<!--[if !supportLists]-->二、<!--[endif]-->限时测试。
还记得我在初级篇中给出的例子吗,那个求平方根的函数有Bug,是个死循环:public void squareRoot(int n) {for (; ;) ; //Bug : 死循环}如果测试的时候遇到死循环,你的脸上绝对不会露出笑容。
因此,对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。
实验五 1 使用JUnit执行单元测试
![实验五 1 使用JUnit执行单元测试](https://img.taocdn.com/s3/m/2264b2d4c1c708a1284a4403.png)
通过一个简单的例子了解 JUnit 的使用。
控制器 Controller:同客户交互、控制并管理每个请求的处理的组件,既可用于表现层模式,也可以用于业 务层模式。控制器所做的事情:
z 接受请求 z 对请求执行常用计算 z 选择合适的请求处理器 z 路由请求,以使处理器可以执行相关的业务逻辑 z 可能会提供一个顶层的处理器用于处理错误和异常 Controller 是一个很好用的模式,许多应用中都可以看到它。如:在表现层模式中,一个 Web Controller 接 受 HTTP 请求,并把 HTTP 参数、cookie、HTTP 头取出,使得 HTTP 元素易于被其他部分访问。Web Controller 会基于请求中的元素判断需调用的合适的业务逻辑组件。Apache Struts 框架就是 Web Controller 的一个例子。 这里假设一个简单的使用 Controller 情况:用户向系统发送请求 Request,系统中的控制器 Controller 经过 分析 Request 中的信息,然后调用一个合适的服务,并将服务的处理结果 Response 返回给客户。
fail("Not yet implemented"); } } 点击 RunÆRun As JUnit Test,则得到失败的结果,因为现在还没有实现测试的逻辑。
下面开始实现测试的代码,第一个碰到的问题就是,用到的测试类(脚手架之类的东西)如何组织。 一种方案将这些类放在测试用例类中作为内部类;一种方案将其作为作为共有类。 原则是:如果类比较简单,而且以后也不太可能变复杂,则将其写成内部类比较简单方便,否则将其作为
} public void testAddHandler() {
junit单元测试的基本用法
![junit单元测试的基本用法](https://img.taocdn.com/s3/m/ea323c7e590216fc700abb68a98271fe910eafa9.png)
junit单元测试的基本用法JUnit是Java编程语言的一个单元测试框架,它提供了一种标准化的方式来编写和运行测试代码。
JUnit单元测试的基本用法包括以下几个步骤:1. 添加依赖首先,需要在项目中添加JUnit的依赖。
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:'''xml<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>'''如果你使用的是Gradle,可以在build.gradle文件中添加以下依赖:'''groovydependencies {testImplementation 'junit:junit:4.13.2'}'''2. 编写测试类创建一个Java类,并使用'@Test'注解来标记测试方法。
例如:'''javaimport org.junit.Test;import static org.junit.Assert.*;public class MyTest {@Testpublic void testAddition() {int result = 2 + 2;assertEquals(4, result);}}'''在上面的例子中,我们编写了一个测试方法'testAddition()',它使用'assertEquals()'方法来验证2 + 2的结果是否为4。
Eclpise中单元测试Junit的使用精品PPT课件
![Eclpise中单元测试Junit的使用精品PPT课件](https://img.taocdn.com/s3/m/c5e76c7dbcd126fff7050bc2.png)
– ng.Object(JUnit4)
2020年10月28日
4
setUp()和tearDown()方法
•
JUnit中的setUp()方法用于写一些初始化代码,每个测试方法
在执行之前都会先执行setUp()。
•
tearDown()方法用于写一些清理代码,每个测试方法在执行之
后也会再执行tearDown()。
•
有多少测试方法,setUp()和tearDown()方法就会被执行多少次
(但在JUnit4.0中却可以在整个测试过程中只调用一次)。如
果setUp()、)没有什么代码可写,也可以删除掉。
2020年10月28日
5
JUnit的assert类别
•
Assert提供一断言方法(assert methods)的集合,像是
assertXXXX()等,這些方法都是静态方法,它们会在断言失败
时丢出一个Throwable的物件,其中会带有断言失败的讯息。
•
Assert类别中提供了像如assertEquals()、assertTure()、
assertFalse()、assertSame() 、assertNotSame()、
• 由于这种功能在代码中会经常使用,所以一般把它 写在一个工具类中,比如写成工具类StringUtil中的 一个静态方法split。
2020年10月28日
7
应用JUnit的测试实例
• 在Eclipse中创建StringUtil类,实现把字符串分割成 数组的方法split(),代码如下图所示:
2020年10月28日
2020年10月28日
12
编写JUnit测试代码
5. 不仅要测试上述情况,还要测试一些应该抛 出的一场是否已经抛出。所以还要写一个测 试抛出异常的测试方法testSplitException(); 该方法代码如图所示:
基本路径测试法和单元测试工具JUnit的使用
![基本路径测试法和单元测试工具JUnit的使用](https://img.taocdn.com/s3/m/01712d71a26925c52cc5bfde.png)
实验报告实验序号:02 实验项目名称:基本路径测试法和单元测试工具JUnit的使用图一修改后的代码:package first;public class SaleMachine {private int countOfBeer, countOfOrangeJuice, countOfFiveCents, countOfOneDollar;private String[] typeOfGoods = {"Beer", "OrangeJuice"};private String resultOfDeal;public SaleMachine(){initial();}public void initial(){countOfBeer = 6;countOfOrangeJuice = 6;countOfFiveCents = 6;countOfOneDollar = 6;}public SaleMachine(int fiveCents, int oneDollar, int numOfBeer, int numOfOrange)//便于测试的初始化函数{countOfFiveCents = fiveCents;countOfOneDollar = oneDollar;countOfBeer = numOfBeer;countOfOrangeJuice = numOfOrange;}public String currentState(){String state = "Current State\n" +"Beer: " + countOfBeer + "\n" +"Orange Juice: " + countOfOrangeJuice + "\n" +"5 Cents: " + countOfFiveCents + "\n" +"1 Dollar: " + countOfOneDollar;return state;}public String operation(String type, String money)//type是用户选择的产品,money是用户投币种类{if(money.equalsIgnoreCase("5C")) //如果用户投入5角钱{if(type.equals(typeOfGoods[0])) //如果用户选择啤酒{if(countOfBeer>0) //如果还有啤酒{countOfBeer--;countOfFiveCents++;resultOfDeal = "Input Information \n" +"Type: Beer; Money: 5 Cents; Change: 0\n\n" + currentState();return resultOfDeal;}else{resultOfDeal= "Failure Information \n" + "Beer Shortage";return resultOfDeal;}}else if (type.equals(typeOfGoods[1])) //用户选择橙汁{if(countOfOrangeJuice > 0){countOfOrangeJuice--;countOfFiveCents++;resultOfDeal = "Input Information \n" +"Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" + currentState();return resultOfDeal;}else{resultOfDeal = "Failure Information \n" + "OrangeJuice Shortage";return resultOfDeal;}}else{resultOfDeal = "Failure Information \n" + "Type Error";return resultOfDeal;}}else if(money.equalsIgnoreCase("1D")) //如果用户投入一元钱{//if(countOfFiveCents>0) //如果用户投入一元钱//{if(countOfFiveCents > 0) //如果用户有零钱{if(type.equals(typeOfGoods[0])&&countOfBeer>0)//如果用户选择啤酒而且还有啤酒{countOfBeer--;countOfFiveCents--;countOfOneDollar++;resultOfDeal = "Input Information \n" +"Type: Beer; Money: 1 Dollar; Change: 5 Cents\n\n" + currentState();return resultOfDeal;}else if(type.equals(typeOfGoods[1])&&countOfOrangeJuice>0)//如果用户选择橙汁而且还有橙汁{countOfOrangeJuice --;countOfFiveCents --;countOfOneDollar ++;resultOfDeal = "Input Information \n" +"Type: OrangeJuice; Money: 1 Dollar; Change: 5 Cents\n\n" + currentState();return resultOfDeal;}else{if(type.equals(typeOfGoods[0])&&countOfBeer<=0){resultOfDeal = "Failure Information \n" + "Beer Shortage";return resultOfDeal;}elseif(type.equals(typeOfGoods[1])&&countOfOrangeJuice<=0){resultOfDeal = "Failure Information \n" + "OrangeJuice Shortage";return resultOfDeal;}else{resultOfDeal = "Failure Information \n" + "Type Error";return resultOfDeal;}}}else{resultOfDeal= "Failure Information \n"+ "Change Shortage";return resultOfDeal;}}//else//{//resultOfDeal = "Failure Information \n" + "Money Error";//return resultOfDeal;//}//}resultOfDeal = "Failure Information \n" + "Money Error";return resultOfDeal;}}测试用例代码:package first;import junit.framework.TestCase;public class TestSaleMachine extends TestCase {public void testOperation1() //售货机各资源均有剩余,用户投币5角,选择啤酒{SaleMachine saleMachine1 = new SaleMachine();String expectedResult = "Input Information \n" +"Type: Beer; Money: 5 Cents; Change: 0\n\n" +"Current State\n" +"Beer: 5\n" +"Orange Juice: 6\n" +"5 Cents: 7\n" +"1 Dollar: 6";assertEquals(expectedResult, saleMachine1.operation("Beer", "5C"));}public void testOperation2()//售货机没有啤酒剩余,用户投币5角,选择啤酒{SaleMachine saleMachine2 = new SaleMachine(6,6,0,6);String expectedResult = "Failure Information \n" + "Beer Shortage";assertEquals(expectedResult,saleMachine2.operation("Beer", "5C"));}public void testOperation3() //售货机各资源均有剩余,用户投币5角,选择橙汁{SaleMachine saleMachine3 = new SaleMachine();String expectedResult = "Input Information \n" +"Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" +"Current State\n" +"Beer: 6\n" +"Orange Juice: 5\n" +"5 Cents: 7\n" +"1 Dollar: 6";assertEquals(expectedResult, saleMachine3.operation("OrangeJuice", "5C"));}public void testOperation4()//售货机没有橙汁,用户投币5角,选择橙汁{SaleMachine saleMachine4 = new SaleMachine(6,6,6,0);String expectedResult = "Failure Information \n" + "OrangeJuice Shortage";assertEquals(expectedResult,saleMachine4.operation("OrangeJuice","5C"));}public void testOperation5()//用户投入5角,选择非啤酒非橙汁{SaleMachine saleMachine5 = new SaleMachine(6,6,6,6);String expectedResult = "Failure Information \n" + "Type Error";assertEquals(expectedResult,saleMachine5.operation("Cola", "5C"));}public void testOperation6()//售货机有啤酒且有5角币,用户投币1元,选择啤酒{SaleMachine saleMachine6 = new SaleMachine(6,6,6,6);String expectedResult = "Input Information \n" +"Type: Beer; Money: 1 Dollar; Change: 5 Cents\n\n" +"Current State\n" +"Beer: 5\n" +"Orange Juice: 6\n" +"5 Cents: 5\n" +"1 Dollar: 7";assertEquals(expectedResult,saleMachine6.operation("Beer", "1D"));}public void testOperation7() //售货机没有啤酒有5角,用户投币1元,选择啤酒{SaleMachine saleMachine7 = new SaleMachine(6,6,0,6);String expectedResult = "Failure Information \n" + "Beer Shortage";assertEquals(expectedResult, saleMachine7.operation("Beer", "1D"));}public void testOperation8()//售货机有橙汁且有5角币,用户投币1元,选择橙汁{SaleMachine saleMachine8 = new SaleMachine(6,6,6,6);String expectedResult = "Input Information \n" +"Type: OrangeJuice; Money: 1 Dollar; Change: 5 Cents\n\n" +"Current State\n" +"Beer: 6\n" +"Orange Juice: 5\n" +"5 Cents: 5\n" +"1 Dollar: 7";assertEquals(expectedResult,saleMachine8.operation("OrangeJuice", "1D"));}public void testOperation9()//售货机有5角没有橙汁,用户投币1元,选择橙汁{SaleMachine saleMachine9 = new SaleMachine(6,6,6,0);String expectedResult = "Failure Information \n" + "OrangeJuice Shortage";assertEquals(expectedResult,saleMachine9.operation("OrangeJuice", "1D"));}public void testOperation10()//售货机有5角,用户投币1元,选择非啤酒非橙汁{SaleMachine saleMachine10 = new SaleMachine(6,6,6,6);String expectedResult = "Failure Information \n" + "Type Error";assertEquals(expectedResult,saleMachine10.operation("Cola", "1D"));}public void testOperation11()//售货机没有5角,用户投币1元{SaleMachine saleMachine11 = new SaleMachine(0,6,6,6);String expectedResult = "Failure Information \n" + "Change Shortage";assertEquals(expectedResult,saleMachine11.operation("Beer", "1D"));}public void testOperation12()//用户投币既不是5角也不是1元{SaleMachine saleMachine12 = new SaleMachine(6,6,6,6);String expectedResult = "Failure Information \n" + "Money Error";assertEquals(expectedResult,saleMachine12.operation("OrangeJuice","4C") );}}。
Eclipse中使用Junit插件测试
![Eclipse中使用Junit插件测试](https://img.taocdn.com/s3/m/af10b6fafab069dc5022017b.png)
Eclipse中使用Junit插件测试测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。
Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
我们创建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值:下一步,我们准备对这个方法进行测试,确保功能正常。
选中Hello.java,右键点击,选择New->JUnit Test Case:Eclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。
选中setUp()和tearDown(),然后点击“Next”:选择要测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:JUnit会以以下顺序执行测试:(大致的代码)try {HelloTest test = new HelloTest(); // 建立测试类实例test.setUp(); // 初始化测试环境test.testAbs(); // 测试某个方法test.tearDown(); // 清理资源}catch…setUp()是建立测试环境,这里创建一个Hello类的实例;tearDown()用于清理资源,如释放打开的文件等等。
以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。
在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。
如果有多个testXxx方法,JUnit会创建多个XxxTest实例,每次运行一个testXxx方法,setUp()和tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()。
Eclipse插件开发之基础篇(3)插件的测试与调试
![Eclipse插件开发之基础篇(3)插件的测试与调试](https://img.taocdn.com/s3/m/58a3c4d65ebfc77da26925c52cc58bd63186930f.png)
Eclipse插件开发之基础篇(3)插件的测试与调试1. 使⽤JUnit对插件进⾏测试 Eclipse中已经嵌⼊了JUnit,我们可以使⽤JUnit为插件进⾏单体测试。
⼀般的JUnit是不可以对插件部分(对Eclipse的API依赖的部分)进⾏测试的,但是在PDE环境中使利⽤JUnit对插件进⾏单元测试成为可能。
要想进⾏测试⾸先要添加插件的依赖关系,在插件设定页⾯的[依赖关系(Dependencies)]页⾯点击[增加(Add)]按钮,添加[org.junit(3.8.2)]作为必须插件(图3-1)。
图3-1 增加org.junit插件的依赖关系 接下来,⽣成测试⽤例(TestCase)。
测试⽤例和⼀般的JUnit⽤例相同,继承junit.framework.TestCase。
代码1中的测试⽤例说明了,在⼯作台页⾯中打开⼀个视图,并且确认打开的视图处于激活状态。
代码1 插件测试⽤例的⽰例public class SampleViewTest extends TestCase {public SampleViewTest(String name) throws Exception {//取得当前活动的页⾯IWorkbench workbench = PlatformUI.getWorkbench();IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();IWorkbenchPage page = window.getActivePage();//打开视图page.showView("cn.sf.amateras.sample.views.SampleView");//确认打开的视图处于激活状态IWorkbenchPart activePart = page.getActivePart();assertTrue(activePart instanceof IViewPart);assertEquals("cn.sf.amateras.sample.views.SampleView",activePart.getSite().getId());}} 当前这个测试⽤例可以通过在测试类上点右键[执⾏(Run As)]->[JUnit插件测试(JUnit Plug-in Test)]执⾏。
junit单元测试使用方法
![junit单元测试使用方法](https://img.taocdn.com/s3/m/56fb36c66137ee06eff918f1.png)
Webjx 网页教学提示: junit 是用来做单元测试,最近项目中可能要需要, 所以了解了以下!说一下 junit 的使用! junit 是用来做单元测试,最近项目中可能要需要,所以了解了以下!说一 下 junit 的使用! 一、安装 junit 下载 junit.jar 放在你工程的编译路径下, ok!这不用解释 二、使用 junit 使用的几种情况:具体使用间三中的代码注释部分 1、测试某个类的所有方法 2、测试某个类的个别方法 3、测试几个类中的全部方法 4、测试几个类中的指定方法 三、 几个已经生成的类、eclipse3.2+myeclipse4.1+j2sdk1.4.2 以下是被测试的类 package common; import java.io.*; public class RunTime { public boolean executeRunTime(int str) { /* * try { Process prop = Runtime.getRuntime().exec(str); // Process prop = * Runtime.getRuntime().exec("cmd/E:ON/C start 1.txt"); } catch * (IOException e) { e.printStackTrace(); } */ if (str == 1) { return true; } else { return false; } } public int reValue(int a ,int b) { return a+b; } } 以下是 junit 的测试类 package common;
import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.Assert; import junit.framework.TestSuite; public class RunTimeTest extends TestCase { public static RunTime op = null; public RunTimeTest(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); op = new RunTime(); } protected void tearDown() throws Exception { super.tearDown(); } /* * Test method for 'common.RunTimeTest.executeRunTime()' */ public void testExecuteRunTime() { // junit.framework.TestResult r = new junit.framework.TestResult(); try { Assert.assertEquals(true, op.executeRunTime(1));// 若失败则抛出 AssertionFailedError 异常 // throw new Exception( "This is a test."); // Assert.fail(); } catch (Exception e) { System.out.println("sfsd"); Assert.fail("fsdf"); } } public void testreValue() { Assert.assertEquals(" i am here!",2,op.reValue(1,2)); } // 可在一个单独类中实现
跟我学如何实现在Eclipse中进行JUnit单元测试的开发实例(第2部分)
![跟我学如何实现在Eclipse中进行JUnit单元测试的开发实例(第2部分)](https://img.taocdn.com/s3/m/fdaf3f0b59eef8c75fbfb3e6.png)
杨教授工作室,版权所有,盗版必究, 11/12 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
如果出现错误的状态
杨教授工作室,版权所有,盗版必究, 12/12 页
杨教授工作室,版权所有,盗版必究, 1/12 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
编程该 DAOInterfaceImple 类 package com.px1987.junit.dao; import java.sql.*; public class DAOInterfaceImple implements DAOInterface { String url="jdbc:odbc:JUnitDSN"; String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver"; Connection con=null; Statement stmt=null; ResultSet rs=null; String result=null; public DAOInterfaceImple() { con=connectToDB(); } public Connection connectToDB() //本例为了简化, 直接将数据库连接放在 DAO 中。
杨教授工作室,版权所有,盗版必究, 3/12 页
*
from
UsБайду номын сангаасrInfo
where
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
result = e.toString(); } finally { //关闭 JDBC 资源 if(rs != null) { try { rs.close(); } catch(SQLException ex) { ex.printStackTrace(); } } if(con != null) { try { con.close(); } catch(SQLException ex) { ex.printStackTrace(); } } } return result; } }
单元测试——Junit
![单元测试——Junit](https://img.taocdn.com/s3/m/778e4c5169eae009581bec9c.png)
单元测试 JunitEclipse 中使用Jnit进行单元测试一建立一个项目编写一个Calculator类,实现基本的加、减、乘、除等运算。
代码如下public class Calculator {private static int result; // 静态变量,用于存储运行结果public void add(int n) {result = result + n;}public void substract(int n) {result = result - 1; //Bug: 正确的应该是 result =result-n}public void multiply(int n) {} // 此方法尚未写好public void divide(int n) {result = result / n;}public void square(int n) {result = n * n;}public void squareRoot(int n) {for (; ;) ; //Bug : 死循环}public void clear() { // 将结果清零result = 0;}public int getResult() {return result;}}单击项目,点击“properties”,在弹出窗口中选择“Java Build Path”,右上选择“Libraries”标签,如图1所示,图1然后在最右边点击“Add Library…”按钮,出现如图2所示窗口图2选择“Junit”,单击Next按钮,出现如图3所示的情境。
图3单击“Finish”。
这样Junit就被包含进项目中。
生成Junit测试框架在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“New JUnit Test Case”。
出现如图4所示情境。
选择“New JUnit 4 test”,在“name”输入“TestCalculator”,在“Class under test”中输入要测试的类“Calculator”。
在Eclipse中使用JUnit4进行单元测试(初级篇)
![在Eclipse中使用JUnit4进行单元测试(初级篇)](https://img.taocdn.com/s3/m/b90044ceb7360b4c2f3f64c2.png)
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。
但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情。
所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。
传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。
正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。
于是有一个牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是JUnit4。
本文简要介绍一下在Eclipse3.2中使用JUn it4进行单元测试的方法。
首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me ,先来体验一下单元测试的快感!首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。
这个类并不是很完美,我们故意保留了一些Bug 用于演示,这些Bug在注释中都有说明。
该类代码如下:public class Calculator {private static int result; //静态变量,用于存储运行结果public void add( int n) {result = result + n;public void substract( int n) { result = result - 1;//Bug:正确的应该是 result =result -npublic void multiply( int n) {//此方法尚未写好public void divide( int n) { result = result / n;public void square( int n) { result = n * n;public void squareRoot( int n) { for (; ;) ;//Bug : 死循环public void clear() { // 将结果清零public int getResult() { return result;第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键, 点属性”如图:—卜艸result = 0;File Edit Scirce Reactor Maviqate Search Project Run Wfridcw, Help ■希書吐&〒 訂 &—JUnft:占 Formaklest''S 日JI 丁锻 2 GUITestlr _r I.'.I? ILaveRennennberWartls J T J*戸JUn#4 Testil> src卜 ft :P£ Sysl 卜» JUhit 吟'M/CbckLzr Servers s> 'U test|::严pr ivate stat lc Ca leu la. tor calculstt-or@Beicre13puti 1 ic void setUp () throwsExc&ptiDncalculator , clear ():国 Gaku^tWijsvaljO C^kul^rT^tlijoya 圖 NewCo Into—叮pen in Mew WindowOpen Type Hieurch^网void testAddU { Lculator . add.(2);二 <op/Ctrl+<sertEquals (5 f tor. getReaCop/ Quaff isd Nam&^7=. PasteCtrl+V乂 CeleteD&latevoid tescSut )stracE ()(B LI I L I Path► Lculator , ^dd.( 10):Source ^lt+Shift+-5Lculatcir.suijstraLct (2):Fefac^orAlt+ShiFt-hT卜 5er tEquals ( S f .tar ・ get-Res^Import...口 Expirt .. iP* Multiply () Wot 7&c imp 1 erne nrF呂_ RefreshClose PnojectClose Unrelated Projectsvoid teatMult ip 1y (){Run As Cetiuci As Erohle As Validate TgamCofnpare WithRestore From Lot ml Hestor^...PDE TQils」nv 日Persisten 匚亡Declaration 匚onsole在弹出的属性窗口中,首先在左边选择 “Java Build Path ”,然后到右上选择“Libraries标签,之后在最右边点击 “Add Library …按钮,如下图所示:然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。
MyEclipse中使用Junit插件进行单元测试
![MyEclipse中使用Junit插件进行单元测试](https://img.taocdn.com/s3/m/4a4d23a5d1f34693daef3eb7.png)
Eclipse中使用Junit插件进行单元测试单元测试简介单元测试指的是使用编写好的测试代码来检验需要被测试的代码。
我们通常给要测试的方法传入一些参数值,然后检测方法的返回值跟预期是否一致。
一般情况下我们会传入一些容易引发错误的数据,例如给计算除法的方法传入除数0,并且测试的参数也会传入许多组,这样才能保证测试效果。
为什么要使用单元测试注:如果你时间不多请直接看后面的粗体每当别人提起“单元测试”都会让william的内心难受上好长一阵子,往往他的好心情也会一扫而光。
这又是为什么呢?缺少单元测试的项目很难达保证程序质量。
我们编写代码时,一定会反复调试保证它能够编译通过。
如果是编译没有通过的代码,没有任何人会愿意交付给自己的老板。
但代码通过编译,只是说明了它的语法正确;我们却无法保证它的语义也一定正确,没有任何人可以轻易承诺这段代码的行为一定是正确的。
幸运的是单元测试会为我们的承诺做保证。
编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。
有了单元测试,我们可以自信的交付自己的代码,而没有任何的后顾之忧。
单元测试的优点1、单元测试是一种验证行为当针对一个Java类的测试用例写好之后,日后再向这个Java类添加新的方法并不影响存在的测试用例,由于测试用例是对以前的方法测试,因此不会映像到测试用例,我们只需向测试用例加入对新方法的测试即可。
2、从旁观者的角度编写测试用例程序设计者讲UML类图画好之后,程序就有了类结构,这时对这个类中的方法编写测试用例,然后程序员开始讲类的具体内容实现。
写好之后让测试用例测试。
编写的顺序是先写测试用例再写程序具体代码,单元测试可以保证测试用例绝对客观、公正。
因为他是在具体程序之前编写的。
3、代码可以反复被测试用例测试第一个测试用例创建一个Java类Calculation,完成加减乘除四则运算。
在新创建的类“Calculation”上右键——New——Other,弹出New对话框,选择JUnit Test Case,如下图:Next,点击“Click here”导入JUnit包,如下图:点“OK”后,警告解除,点“Next”勾选刚才创建的加、减、乘、除方法,然后点“Finished”。
软件测试实验JUnit单元测试
![软件测试实验JUnit单元测试](https://img.taocdn.com/s3/m/67d7ee7d777f5acfa1c7aa00b52acfc789eb9fa4.png)
第三章JUnit单元测试实验1 开始使用JUnit实验目的1、学习使用进行单元测试;2、掌握编写测试代码的方法;3、应用JUnit进行单元测试,掌握最佳实践编写测试代码.实验环境1、Windows环境,MyEclipse或Eclipse,.2、每个学生操作1台电脑.实验原理JUnit是一个开源的Java编程语言的单元测试框架,最初由 Erich Gamma 和 Kent Beck 编写.Junit测试是一种白盒测试工具.JUnit是一套框架,继承TestCase类,就可以用Junit进行自动测试了.具有JUnit经验对于应用“测试驱动开发TDD”的程序开发模型是非常重要的.JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了.由于JUnit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design的实现有了现成的手段:用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功.以后对代码的修改和优化,运行测试成功,则修改成功.Java 下的 team 开发,采用 cvs版本控制 + ant项目管理 + JUnit 集成测试的模式时,通过对ant的配置,可以很简单地实现测试自动化.实验内容根据下面的实验步骤完成实验.1、JUnit包下载.1 从下载Junit,打开该链接,会有一个下载链接,下载,保存在用户机的文件系统中.2 解包,得到如图3-1的解包文件.图1 Junit解包文件表1 Junit文件说明文件/目描述录JUnit框架结构、扩展和测试运行器的二进制发布JUnit的源代码,包括一个Ant 的buildfile文件junit是个目录,内有JUnit自带的用JUnit编写的测试示例程序javadoc JUnit完整的API文档doc一些文档和文章,包括“Test Infected: Programmers Love Writing Tests”和其它一些资料,可以帮助我们入门.3 配置以JUnit4.8.2为例.步骤如下:①右击“我的电脑”-“属性”-高级-环境变量;②在系统变量中选择“CLASSPATH”如果没有则新建一个,变量名CLASSPATH,变量值d:\junit4.8.2\如果有CLASSPATH,将d:\junit4.8.2\加入到变量值即可,多个中间需用;隔开.图2 Junit配置成功4 检验:运行中输入cmd输入命令:java 配置成功,如图2所示.2、编写JUnit测试用例.使用JUnit 的最佳实践:(1)新建一个名为test的source folder,用于存放测试类源代码;(2)目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面;(3)测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest.下面将以一个具体的实例进行说明.1 新建一Java Project.图3 新建Java Project2 配置构建路径.图4 配置构建路径 3 Add Library-JUnit 4.图5 Add Library图6 选择JUnit 41图7 选择JUnit 424 建一个包并在此包下建一个除法类:Divide.图8 类DivideDivide类的程序源代码如下所示:package ;public class Divide {private static int result;public void divide int num{result/=num;}public int getResult{return result;}public void setResult int result代码编写完成后,进行调试编译,确保没有语法错误.5 右键Divide类.图9 新建JUnit Test Case1图10 新建JUnit Test Case2图11 新建JUnit Test Case3MyEclipse会自动为测试类取名:被测试类+Test,单击Next就可以了.根据图12选择需要进行测试的方法.注意:测试类之所以使用“Test”开头或“Test”结尾,是为了更好的区分测试类与被测试类.图12 选择需要测试的方法6 创建测试用例.首先创建一个默认的测试用例.图13 产生默认的测试用例7 执行测试用例.如图14所示.测试结果:红色,测试失败.图14 运行测试用例图15 测试结果所有类测试结果8 修改测试用例:.具体代码如图16所示.新测试用例运行后的测试结果如图17所示.注意:测试方法必须使用注解修饰. 测试方法必须使用 public void 修饰,而且不能带有任何参数.测试方法在中没有要求,但是为了使得命名意义,一般推荐采用“test”+“被测试方法”的命名规则.assertEquals 是由JUnit 提供的一系列判断测试结果是否正确的静态断言方法位于类中之一,我们使用它将执行结果 result 和预期值“result”进行比较,来判断测试是否成功.图16 修改后的测试用例图17 修改后的测试用例的测试结果绿色的进度条提示我们,测试运行通过了.但现在就宣布代码通过了单元测试还为时过早.记住:你的单元测试代码不是用来证明你是对的,而是为了证明你没有错.因此单元测试的范围要全面,比如对边界值、正常值、错误值得测试;对代码可能出现的问题要全面预测,而这也正是需求分析、详细设计环节中要考虑的.3、应用JUnit对类WordDealUtil编写测试代码.(1)被测试程序说明:对名称、地址等字符串格式的内容进行格式检查.将Java对象名称每个单词的头字母大写按照数据库命名的习惯进行格式化格式化后的数据import 对名称、地址等字符串格式的内容进行格式检查或者格式化的工具类/public class WordDealUtil {/将Java对象名称每个单词的头字母大写按照数据库命名的习惯进行格式化格式化后的数据为小写字母,并且使用下划线分割命名单词例如:employeeInfo 经过格式化之后变为employee_infoparam name Java对象名称/public static String wordFormat4DBString name{Pattern p = "A-Z";Matcher m = name;StringBuffer sb = new StringBuffer;while{sb, "_"+;}return sb.toString.toLowerCase;}}//测试wordFormat4DB正常运行的情况Test public void wordFormat4DBNormal{String target = "employeeInfo";String result = target;assertEquals"employee_info", result;}}推荐每编写完一个测试方法,则执行”run”,看测试结果,结果应该是通过的.测试结果通过:(3)继续添加测试代码,并运行看测试结果.public class TestWordDealUtil {//测试 null 时的处理情况Test public void wordFormat4DBNull{String target = null;String result = target;assertNullresult;}//测试空字符串的处理情况Test public void wordFormat4DBEmpty{ String target = "";String result = target;assertEquals"", result;}//测试当首字母大写时的情况Test public void wordFormat4DBegin{ String target = "EmployeeInfo";String result = target;assertEquals"employee_info", result;}//测试当尾字母为大写时的情况Test public void wordFormat4DBEnd{ String target = "employeeInfoA";String result = target;assertEquals"employee_info_a", result;再次运行测试.很遗憾,JUnit 运行界面提示我们有两个测试情况未通过测试——当首字母大写时得到的处理结果与预期的有偏差,造成测试失败failure;而当测试对null 的处理结果时,则直接抛出了异常——测试错误error.显然,被测试代码中并没有对首字母大写和 null 这两种特殊情况进行处理.图18 JUnit测试运行结果(4)修改测试代码,直到测试通过.修改以后的代码:测试结果:实验小结通过本次实验掌握了Junit单元测试的环境配置,以及基本操作步骤,学习到了JInit单元测试的作用以及如何修改错误,对以后进行软件测试方面收获非常大.经过这次理论学习,明白了要求掌握的知识对于我今后的作用.这让我明确了以后学习的目标,在不断学习软件编程的同时,也应该继续软件测试的深入学习.。
Eclipse中使用Junit编写测试用例
![Eclipse中使用Junit编写测试用例](https://img.taocdn.com/s3/m/c5070c7f00f69e3143323968011ca300a6c3f65e.png)
Eclipse中使⽤Junit编写测试⽤例Eclipse⾃带Junit插件,不⽤安装就能在项⽬中编写测试⽤例,⾮常⽅便。
在编写测试⽤例之前,需要先引⼊Junit。
对项⽬根⽬录右键,选择Properties,Java Build Path,Libraries,如图:Add Library,选择Junit:点Next选择Junit版本,然后Finish就完成了引⼊。
假设有如下类:package choon.test;public class Calculate {public int Add(int x,int y) {return x + y;}}可以编写测试⽤例如下:package choon.test;import static org.junit.Assert.*;import org.junit.Test;public class Test1 {@Testpublic void test() {Calculate calculate = new Calculate();assertEquals(8, calculate.Add(3, 5));}}对test⽅法右键Run As Junit Test即可运⾏该测试⽤例:如图,绿⾊状态条表⽰测试通过,如果是红⾊,则表⽰没有通过。
被before标记的⽅法在每个测试⽤例执⾏之前执⾏,被after标记的⽅法在每个测试⽤例执⾏后执⾏。
假如编写如下测试⽤例:package choon.test;import static org.junit.Assert.*;import org.junit.After;import org.junit.Before;import org.junit.Test;public class Test1 {@Beforepublic void setUp() {System.out.println("---begin test---");}@Testpublic void test() {Calculate calculate = new Calculate();assertEquals(8, calculate.Add(3, 5));System.out.println("test case");}@Afterpublic void tearDown() {System.out.println("---end test---");}}则会有下⾯的执⾏结果:测试⽤例的编写很重要,⼀个不好的测试⽤例既起不到测试作⽤⼜浪费时间,⽽⼀个好的测试⽤例可以很好的指出代码中的问题,避免更⼤的⿇烦。
在Eclipse中如何进行JUnit4版本的单元测试
![在Eclipse中如何进行JUnit4版本的单元测试](https://img.taocdn.com/s3/m/6f461a1cf78a6529647d53d1.png)
return oneDigit-twoDigit; } public int mul(int oneDigit, int twoDigit){
杨教授工作室,版权所有,盗版必究, 3/19 页
杨教授工作室,版权所有,盗版必究, 5/19 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
5、对被测试的 Calculator 类添加对应的测试用例类 TestCalculatorJUnit4 (1)测试用例类的名称遵守“Test + 原类名”
(2)选择被测试的目标方法
杨教授工作室,版权所有,盗版必究, 6/19 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(3)产生出如下的模板程序 package com.px1987.junit4; import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class TestCalculatorJUnit4 {
fail("Not yet implemented"); } @Test public void testSub() {
fail("Not yet implemented"); } @Test
杨教授工作室,版权所有,盗版必究, 7/19 页
eclipse单元测试生成报告
![eclipse单元测试生成报告](https://img.taocdn.com/s3/m/8662a6805ebfc77da26925c52cc58bd631869385.png)
eclipse单元测试生成报告Eclipse 提供了一个名为 JUnit 的框架,可以用于编写和运行单元测试。
在Eclipse 中编写单元测试后,可以通过以下步骤生成测试报告:1. 打开 Eclipse,并打开需要生成测试报告的项目。
2. 在项目上右键单击,选择“New” -> “Other”,在弹出的对话框中选择“JUnit” -> “JUnit Test Case”。
3. 在“JUnit Test Case”对话框中,输入测试类名和测试方法名,选择需要运行的测试方法,然后点击“Finish”按钮。
4. 运行测试。
在 Eclipse 的下方选择“JUnit”选项卡,然后点击“Run”按钮,运行测试。
测试完成后,可以在“JUnit”选项卡中查看测试结果。
5. 生成测试报告。
在 Eclipse 的上方选择“Window”选项卡,然后点击“Show View”按钮,选择“Other”。
在弹出的对话框中输入“Test Results”,然后点击“Go”按钮。
在“Test Results”视图中,可以看到所有的测试结果。
右键单击某个测试结果,选择“New” -> “Other”,在弹出的对话框中选择“General” -> “Report”。
在“Report”对话框中,输入报告名称和描述,选择需要包含的测试结果,然后点击“Finish”按钮。
6. 查看测试报告。
在 Eclipse 的下方选择“General”选项卡,然后点击“Open”按钮,打开生成的测试报告。
在测试报告中,可以看到每个测试方法的运行结果和覆盖率信息。
以上是在 Eclipse 中生成单元测试报告的步骤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Eclipse中使用Junit插件进行单元测试
测试是软件开发的重要环节之一。
按照软件开发的过程测试可分为:单元测试、集成测试、系统测试、域测试等。
我们这里将讨论面向程序员的单元测试。
一、什么是单元测试
单元测试指的是使用编写好的测试代码来检验需要被测试的代码。
我们通常给要测试的方法传入一些参数值,然后检测方法的返回值跟预期是否一致。
一般情况下我们会传入一些容易引发错误的数据,例如给计算除法的方法传入除数0,并且测试的参数也会传入许多组,这样才能保证测试效果。
二、为什么要使用单元测试
注:如果你时间不多请直接看后面的粗体
每当别人提起“单元测试”都会让william的内心难受上好长一阵子,往往他的好心情也会一扫而光。
这又是为什么呢?
5年前William的软件公司很顺利的拿到美国ADC电讯公司(ADC Telecommunications )的一单软件开发的生意,总价值1500万美元,利润在32%上下。
面对着几百万的收益,William 兴奋地对自己的妻子说:“Catherine,不久我们的银行户头上就会多出几百万美元。
做完这笔生意,你老爸再也不会抱怨他的女儿嫁给了一个贫困街区出生并且没受过高等教育的乡巴佬。
还真想不到你老爸再见到我的时候会是什么样的表情……”。
作为同William生活了12年的Catherine很清楚的知道,William这个人实际的本事没多少,然而大话却说了不少。
当初她正因为轻信了William的许诺才嫁给他,然而当年的承诺从来就没兑现过。
虽说William这个人没什么本事,可是他却有着令别人羡慕的“狗屎运”。
高中毕业之后,他参了军,在越南战争中他所在的小队中了越南人的埋伏,却唯独William 一个人活着回来。
(William牢记美军士兵手册其中一条训令:永远不要和比你作战勇敢的战友躲在同一个散兵坑,因为他会给你们招来致命炮火打击。
)William回来后向自己的上司编造了谎言,因而被提升为中尉,授予紫心勋章。
退役后有幸运结识底特律市长的千金——Catherine,并且让这位市长千金以身相许。
William 的岳父虽说从来就没看上过这位贫穷、没教养还时常夸夸其谈的女婿,可最终还是出资给William创办公司。
William的运气不得不让人羡慕,可是这回软件开发他还会这么幸运么?
翌日,William一大早就来到公司,他第一件事情就是要和项目经理谈话。
“嘿!John。
我们的项目要立即投入人力着手开发,别让那些程序员慢吞吞的。
”William认真的说。
“先生,我们的项目还不能立即开发,因为我们还没有做项目需求。
”项目经理John提醒着。
William不耐烦的说:“John,先别管需求那东西,我要最快看到产品。
还有别搞那些耽误时间的单元测试,我希望你们以最快速拿出产品。
”
John很无奈的接受了William的指示。
William真不愧是一个没大脑的人,为了能缩短开发时间,节省开发成本,从而达到提高利润率的目的,不惜进行需求分析、单元测试。
最终的结果完全符合预料,项目失败了,William 失去了400万美元的项目抵押金和300万美元的开发成本。
从William的例子中看到,缺少单元测试的项目很难达保证程序质量。
我们编写代码时,一定会反复调试保证它能够编译通过。
如果是编译没有通过的代码,没有任何人会愿意交付给自己的老板。
但代码通过编译,只是说明了它的语法正确;我们却无法保证它的语义也一定正确,没有任何人可以轻易承诺这段代码的行为一定是正确的。
幸运的是单元测试会为我们的承诺做保证。
编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。
有了单元测试,我们可以自信的交付自己的代码,而没有任何的后顾之忧。
三、单元测试的优点
1、单元测试是一种验证行为
当针对一个Java类的测试用例写好之后,日后再向这个Java类添加新的方法并不影响存在的测试用例,由于测试用例是对以前的方法测试,因此不会映像到测试用例,我们只需向测试用例加入对新方法的测试即可。
2、从旁观者的角度编写测试用例
程序设计者讲UML类图画好之后,程序就有了类结构,这时对这个类中的方法编写测试用例,然后程序员开始讲类的具体内容实现。
写好之后让测试用例测试。
编写的顺序是先写测试用例再写程序具体代码,单元测试可以保证测试用例绝对客观、公正。
因为他是在具体程序之前编写的。
3、代码可以反复被测试用例测试
四、你的第一个测试用例
创建一个Java类Calculation,完成加减乘除四则运算。
在新创建的类“Calculation”上右键——New——Other,弹出New对话框,选择JUnit Test Case,如下图:
Next,点击“Click here”导入JUnit包,如下图:
点“OK”后,警告解除,点“Next”
勾选刚才创建的加、减、乘、除方法,然后点“Finished”。
可以看到JUnit在当前包下创建了一个名叫“CalculationTest”的测试类:
下面可以写测试方法了:
右键Run As——JUnit Test,没有任何错误和失败,方法add通过单元测试。
可以修改一下代码,让assertEquals方法的两个参数不相等,再执行单元测试,就会看下面的错误提示:
只有打有“@Test”标识的测试方法才在单元测试时执行。
JUnit窗口可以通过Window——Show View里选择,如图示:
五、JUnit 4语法结构
最新JUnit 4版本语法和从前相比语法异常简单,初学者10分钟就能全部掌握。
1、任意给Junit测试用例起类名,但需要符合正常的Java类命名规范。
2、测试用例类不用继承超类以及实现接口
public class CalculationTest{}
3、如果希望在执行测试之前运行某些代码,例如连接数据库、创建工厂类对象和初始化变量等等,我们可以将这样的代码写到一个方法之中,方法名字自己任意定义。
但是需要在方法之前添加元数据“@Before”
@Before
public void setUp() throws Exception {
calc = new Calculation(); // 在测试开始前首先实例化一个Calculation对象
}
上面的例子看到,在执行测试之前对calc引用进行实例化。
这样的代码应该被放在测试之前执行,否则在测试过程中calc没有被初始化,它的值只能是null。
4、如果那些代码需要在测试执行之后运行,例如关闭数据库连接、关闭线程池以及关闭数据库连接池等等,我们还是将他们写道一个方法中,在方法前加入“@After”。
@After
public void setDown() throws Exception {
// 这里写入代码
}
5、定义测试方法。
1) 方法名任意起
2) 方法前面加上“@Test”
3) 方法中可以定义测试的代码
6、测试上传异常
@Test(expected= IllegalArgumentException.Class)
方法前的这句元数据意思是期待抛出IllegalArgumentException类型的异常
7、测试时间
测试时间指的是当超过指定的时间,测试仍然没有结束,则判定测试失败。
百度文库- 让每个人平等地提升自我
@Test(timeout=500)
public void testGetConnection() {
//写入测试代码
}
上面的代码意味着当500毫秒之后,测试没有结束测试就失败。
11。