ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:221.79KB ,
资源ID:9215477      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9215477.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(采用JUnit4进行单元测试.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

采用JUnit4进行单元测试.docx

1、采用JUnit4进行单元测试采用JUnit4进行单元测试1、再产生一个测试项目 JUnit4TestProject2、在本测试项目中引用应用项目3、在测试项目中添加JUnit4的系统包文件4、对Calculator类添加对应的测试用例类 TestCalculatorJUnit4将产生出下面的模板程序package com.px1987.junit4;import static org.junit.Assert.*;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit

2、.BeforeClass;import org.junit.Test;public class TestCalculatorJUnit4 BeforeClass public static void setUpBeforeClass() throws Exception AfterClass public static void tearDownAfterClass() throws Exception Before public void setUp() throws Exception After public void tearDown() throws Exception Test p

3、ublic void testAdd() fail(Not yet implemented); 5、对上面的代码进行说明(1)与JUnit4框架有关的系统包注意在测试类中所用到的与JUnit4框架有关的系统包,最主要的是是org.junit.*。把它包含进来之后,绝大部分功能就有了。还有一句话也非常地重要“import static org.junit.Assert.*;”,我们在测试的时候所使用的一系列assertEquals方法就来自这个包。所应该注意的是,这是一个静态包含(static),是JDK5中新增添的一个功能。也就是说assertEquals是Assert类中的一系列的静态方法,

4、一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。(2)各种形式的注释由于测试类是一个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。所以我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明,而这是通过其中的各种形式的注释来标示的。“标注”也是JDK5的一个新特性,用在此处非常恰当。我们可以看到,在某些方法的前有Before、Test、Ignore等字样,这些就是标注,以一个“”作为开头。这些标注都是JUnit4自定义的,熟练掌握这些标注的含义非常重要。6、各种形式

5、的注释的说明(1)Ignore 忽略测试某些尚未完成的方法。如果我们在写程序前做了很好的规划,那么哪些方法是什么功能都应该实现定下来。因此,即使该方法尚未完成,他的具体功能也是确定的,这也就意味着你可以为他编写测试用例。但是,如果我们已经把该方法的测试用例写完,但该方法尚未完成,那么测试的时候一定是“失败”。这种失败和真正的失败是有区别的,因此JUnit提供了一种方法来区别他们,那就是在这种测试函数的前面加上Ignore标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示我们有几个测试被忽略,而不是失败。一旦我们完成了相应函数,只需要把Ignore标注删去,

6、就可以进行正常的测试。(2)Before 在任何一个测试执行之前必须执行的代码我们非常希望每一个测试都是独立的,相互之间没有任何耦合度。因此,我们就很有必要在执行每一个测试之前,需要进行一些初始化的操作,这样的方法可以采用Before注释。JUnit3测试运行程序会在运行每个测试之前自动调用setUp()方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。在JUnit4中,仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫setUp(),只要用Before注释来指示即可。注意,也可以用多个Before来注释多个方法在测试之前运行。(3)After

7、 在任何测试执行之后需要进行的收尾工作同样,可以用多个After来注释多个方法在测试之后运行。并保证这两种方法都使用 public void 修饰,而且不能带有任何参数。(4)BeforeClass JUnit4中引入了一个JUnit中没有的新特性:类范围的setUp()和tearDown()方法。JUnit4中引入了一个JUnit中没有的新特性:类范围的setUp()和tearDown()方法。但要区分的是,Before方法在每个Test运行之前都会运行一次,而BeforeClass只在该类所有测试方法运行之前刚好运行一次。例如,假设类中的每个测试都使用一个数据库连接、一个网络连接、一个非常

8、大的数据结构,或者还有一些对于初始化和事情安排来说比较昂贵的其他资源。不要在每个测试之前都重新创建它,我们可以创建它一次,并还原它一次。(5)AfterClass用这两个标注来标注的方法,只在测试用例初始化时执行BeforeClass方法,当所有测试执行完毕之后,执行AfterClass进行收尾工作。在这里要注意一下,每个测试类只能有一个方法被标注为BeforeClass 或 AfterClass,并保证这两种方法都使用 public static void 修饰,而且不能带有任何参数。(6)限时测试(单位为毫秒)对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些

9、预防措施。限时测试是一个很好的解决方案。我们给这些测试方法设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向我们汇报该方法结束的原因是因为超时,这样我们就可以发现这些Bug了。要实现这一功能,只需要给Test标注加一个参数即可,代码如下:Test(timeout = 1000) /限时测试的方法(单位为毫秒) public void testMul() 但是由于并不能准确反应实际时间,所以应用较少,因为测试误差太大绝对不适合拿来做超时测试的! (7)测试异常如果我们觉得一个方法应该抛出异常,但是它没有正常地抛出,这算不算Bug呢?这当然是Bug,JUnit对此也考虑到了这

10、一点,来帮助我们找到这种Bug。Junit4为测试方法增加了判断异常的方式,避免了以前还要通过try/catch块捕捉异常再抛出的复杂方式。例如,我们写的计算器类有除法功能,如果除数是一个0,那么必然要抛出“除0异常”。因此,我们很有必要对这些进行测试。public void testDiv () try int n = 2 / 0; fail(Divided by zero!); catch(ArithmeticException success) assertNotNull(success.getMessage(); 该方法不仅难看,而且试图挑战代码覆盖工具,因为不管测试是否通过还是失败,

11、总有一些代码不被执行。在JUni4中,可以编写抛出异常的代码,并使用注释来声明该异常是预期的:代码如下:Test(expected = ArithmeticException.class) public void testDiv() 我们需要使用Test标注的expected属性,将我们要检验的异常传递给他;Junit4就会检查此方法是否抛出ArithmeticException异常,如果抛出则测试通过,没抛出则测试不通过(如果没有异常抛出或者抛出一个不同的异常,那么测试就将失败。)。7、编程该TestCalculatorJUnit4类package com.px1987.junit4;imp

12、ort java.util.Arrays;import java.util.Collection;import org.junit.After;import org.junit.AfterClass;import org.junit.Assert;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;import org.junit.runners.Parameterized.Parameters;import com.px1987.junit.Cal

13、culator;public class TestCalculatorJUnit4 static Calculator oneCalculator=null; BeforeClass public static void setUpBeforeClass() throws Exception oneCalculator=new Calculator(); AfterClass public static void tearDownAfterClass() throws Exception oneCalculator=null; Before public void setUp() throws

14、 Exception After public void tearDown() throws Exception Test public void testAdd() double onedigit=1.0; double twodigit=2.0; double returnResult=oneCalculator.add(onedigit, twodigit); Assert.assertEquals(returnResult, 3.0); Ignore /忽略测试某些尚未完成的方法。 public void testSub() Test(timeout = 1000) /限时测试的方法(

15、单位为毫秒) public void testMul() Test(expected = ArithmeticException.class) /测试异常 public void testDiv() int x=1; int y=0; int z=x/y; Parameters public static Collection multipleValues() return Arrays.asList(new Object 3, 2, 6 , 4, 3, 12 , 21, 5, 105 , 11, 22, 242 , 8, 9, 72 ); 8、Junit4中的参数化测试(1)应用场合为了保证

16、单元测试的严谨性,我们模拟了不同类型的字符串来测试方法的处理能力,为此我们编写大量的单元测试方法。可是这些测试方法都是大同小异:代码结构都是相同的,不同的仅仅是测试数据和期望值。有没有更好的方法将测试方法中相同的代码结构提取出来,提高代码的重用度,减少复制粘贴代码的烦恼?在以前的 JUnit 版本上,并没有好的解决方法,而现在我们可以使用 JUnit 提供的参数化测试方式应对这个问题。(2)实现的过程 为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。RunWith(Parameterized.class)public class T

17、estCalculatorJUnit4Parameter 为测试类声明几个变量,分别用于存放期望值和测试所用数据。private int expectedResult; private int parameterOne; private int parameterTwo; 为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。Parameters public static Collection addValues() r

18、eturn Arrays.asList(new Object 3, 2, 5 , 4, 3, 7 , 21, 5, 26 , 11, 22, 33 , 8, 9, 17 ); 为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。public TestCalculatorJUnit4Parameter(int parameterOne,int parameterTwo,int expectedResult) this.parameterOne=parameterOne; this.parameterTwo=parameterTwo; this.expectedRes

19、ult=expectedResult; 编写测试方法,使用定义的变量作为参数进行测试。public void testAdd() double returnResult=oneCalculator.add(parameterOne, parameterTwo); Assert.assertEquals(expectedResult,returnResult); (3)最终实现的代码package com.px1987.junit4;import java.util.Arrays;import java.util.Collection;import org.junit.After;import

20、org.junit.AfterClass;import org.junit.Assert;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import com.px1987.junit.Calculator;RunWith(Parameterized.cl

21、ass)public class TestCalculatorJUnit4Parameter static Calculator oneCalculator=null; private int expectedResult; private int parameterOne; private int parameterTwo; /* * 参数化测试必须的构造函数 */ public TestCalculatorJUnit4Parameter(int parameterOne,int parameterTwo,int expectedResult) this.parameterOne=param

22、eterOne; this.parameterTwo=parameterTwo; this.expectedResult=expectedResult; BeforeClass public static void setUpBeforeClass() throws Exception oneCalculator=new Calculator(); AfterClass public static void tearDownAfterClass() throws Exception oneCalculator=null; Parameters public static Collection

23、addValues() return Arrays.asList(new Object 3, 2, 5 , 4, 3, 7 , 21, 5, 26 , 11, 22, 33 , 8, 9, 17 ); Test public void testAdd() double returnResult=oneCalculator.add(parameterOne, parameterTwo); Assert.assertEquals(expectedResult,returnResult); (4)执行该测试用例的结果9、采用测试套件进行测试 TestCalculatorJUnit4Suit测试套件可

24、以将多个测试用例合在一起测试,将相关的测试用例合成一个测试套件,在做一个修改后,只需要运行测试套件就可以,不需要运行每一个测试用例。(1)添加一个类(2)编程该类package com.px1987.junit4;import org.junit.runner.RunWith;import org.junit.runners.Suite;RunWith(Suite.class)Suite.SuiteClasses( TestCalculatorJUnit4.class )public class TestCalculatorJUnit4Suit public TestCalculatorJUn

25、it4Suit() Junit4没有采用以前的套件测试方法,同样使用annotation的方式来进行。只需要在所要构建测试套件的包里创建一个类文件,该类的名称可以为任意的类名。(3)在该类中需要一个特殊的Runner我们需要向RunWith标注传递一个参数Suite.class。同时,我们还需要另外一个标注Suite.SuiteClasses(将需要组成套件运行的类放到此属性中),来表明这个类是一个测试套件类(包含无参数构造方法的类)。我们需要将添加到测试套件中的各个类作为参数传递给该标注就可以了。有了这两个标注之后,就已经完整的表达了所有的含义,因此实际的测试套件类本身的类名称已经无关紧要,随便取一个类名,内容全部为空既可。(4)执行该测试套件10、JUnit 4 为比较数组添加了两个 assert() 方法(1)public static void assertEquals(Object expected, Object actual)(2)public static void assertEquals(String message, Object expected, Object actual)这两个方法以最直接的方式比较数组:如果数组长度相同,且每个对应的元素相同,则两个数组相等,否则不相等。数组为空的情况也作了考虑。

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

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