`
凯旋人生
  • 浏览: 63563 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JUnit4.x 笔记之一

阅读更多

相对JUnit3.8,JUnit4采用了大量Annotation来实现的。

基本使用方

 

  •  包命名从junit.framework.xxx变更到org.junit.xxx.
  • 在JUnit3.8中测试类必须继承TestCase父类,JUnit4中测试类不用继承TestCase
  •  在JUnit3.8中 测试方法满足如下原则1)public 2)void 3)无方法参数4)方法名称必须以test开头,JUnit测试方法不用满足4)即命名不用test +methodName ,用Annotation来标注是测试方法@Test
  • @Before相当于setUp会在每个测试方法调用前执行一次。
  • @After相当于tearDown会在每个测试方法调用前执行一次。
  • @BeforeClass,JUnit3.8没有对应功能,在每个类加载只被执行一次,必须定义static方法一般用于初始化一些代价昂贵的计算,如数据库连接获得。
  • @AfterClass,JUnit3.8没有对应功能,在所有测试结束后只被执行一次,必须定义static方法一般用于回收一些代价昂贵的计算,如数据库连接释放。
  • @Test 可以有timeout参数
  • @Test 可以有expected参数, public abstract java.lang.Class<? extends java.lang.Throwable> expected   Default:org.junit.Test.None.class 

二  组合测试

  •  JUnit3.8中的TestSuite功能在JUnit4中通过新曾的测试运行器来实现JUni4所有的测试都是有测试运行器运行的。JUnit为单元测试提供了默认的运行器。用户可以定制自己的运行器(继承于org.junit.runner.Runner),并且可以为每一个测试类指定具体的运行器。@RunWith(Suite.class)来实现。
  • 1)创建一个空类,用注解org.junit.runner.RunWitch和org.junit.runners.Suite.SuiteClass修饰该空类。2)将org.junit.runners.Suite作为参数传入注解RunWitch以提示JUnit为此类使用套件运行器运行。  3)将需要放入该测试套件的测试类组成数组作为注解SuiteClasses的参数。4)这个空类必须是public修饰,而且存在无参公开的够造函数。
  • @RunWith(Suite.class)@Suite.SuiteClasses({CalculatorTest2.class,LargestTest2.class})
    public class TestAll2 {
     
    }

三 参数化测试

 

 

     

********************************************************************************

//被测试类

package com.test.junit;


/**
 * 数学计算
 * @author Administrator
 *
 */
public class Calculator {

 public int add(int a, int b) {
  return a + b;
 }

 public int minus(int a, int b) {
  return a - b;
 }

 public int multiply(int a, int b) {
  return a * b;
 }

 public int divide(int a, int b)throws Exception
 {
  if(0 == b)
  {
   throw new Exception("除数不能为零!");
  }
  return a / b;
 }
 
}
********************************************************************************

//Junit3.8

package com.test.junit;

import com.test.junit.Calculator;

import junit.framework.Assert;
import junit.framework.TestCase;
/**
 * 在junit3.8中测试类必须继承TestCase父类
 * @author Administrator
 * keep the bar green to keep the code clean
 * 单元测试不是证明您是对的,而是证明您没有错误
 */

public class CalculatorTest extends TestCase
{

 /**
  * 在junit3.8中 测试方法满足如下原则
  * 1)public
  * 2)void
  * 3)无方法参数
  * 4)方法名称必须以test开头
  *
  * Dont't Repeat yourself//不要重复你自己
  */
 
 private Calculator cal;
 
 public void testAdd()
 {
  int result = cal.add(1, 2);
  //断言:assert
  Assert.assertEquals(3,result);
 }
 
 public void testMinus()
 {
  
  int result = cal.minus(1, 2);
  //断言
  Assert.assertEquals(-1, result);
 }
 
 public void testMultiply()
 {
  int result =cal.multiply(2, 3);
  //断言
  Assert.assertEquals(6, result);
 }
 
 
 public void testDivide()
 {
  int result = 0;
  try {
   result = cal.divide(6, 4);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  //断言
  Assert.assertEquals(1, result);
 }
 
 public void testDivide2()
 {
  Throwable tx =null;
  try
  {
   cal.divide(4, 0);
   Assert.fail();
   
  }catch(Exception ex)
  {
   tx = ex;
  }
  
  Assert.assertNotNull(tx);
  Assert.assertEquals(Exception.class, tx.getClass());
  Assert.assertEquals("除数不能为零!",tx.getMessage());
 }

 @Override
 protected void setUp() throws Exception {
  cal = new Calculator();
    
 }

 @Override
 protected void tearDown() throws Exception {
  
 }
}
********************************************************************************

//Junit4

package com.test.junit;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class CalculatorTest2 {
 private Calculator cal;
 /**
  * @Before相当于setUp会在每个测试方法调用前执行一次
  */
 @Before
 public void init(){
  cal = new Calculator();
  System.out.println("init invoked!");
 }
 /**
  * @After相当于tearDown会在每个测试方法调用前执行一次
  */
 @After
 public void destory(){
  System.out.println("destory invoked!");
 }
 /**
  *@BeforeClass,Junit3.8没有对应功能,在每个类加载只被执行一次,必须定义static方法
  *一般用于初始化一些代价昂贵的计算,如数据库连接获得
  */
 @BeforeClass
 public static void globalInit(){
  System.out.println("globalInit Invoked!");
 }

 /**
  *@AfterClass,Junit3.8没有对应功能,在所有测试结束后只被执行一次,必须定义static方法
  *一般用于回收一些代价昂贵的计算,如数据库连接释放
  */
 @AfterClass
 public static void globalDestory(){
  System.out.println("globalDestory Invoked!");
 }
 /**
  * 测试方法命名不用test +methodName
  * 用Annotation来标注是测试方法@Test
  */
 @Test
 public void myAdd() {
  int result = cal.add(1, 2);
  assertEquals(3,result);
 }
 
 @Test
 public void myMinus(){
  int result =cal.minus(1, 2);
  assertEquals(-1,result);
 }
 
 @Test
 public void myMultiply(){
  int result = cal.multiply(2, 3);
  assertEquals(6,result);
 }

 @Test
 public void myDivide(){
  int result=0;
  try {
    result = cal.divide(6, 4);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  assertEquals(1,result);
 }
 /**
  * @Test 可以有expected参数
  * public abstract java.lang.Class<? extends java.lang.Throwable> expected
  * Default:org.junit.Test.None.class
  * @throws Exception
  */
 @Test (expected = Exception.class)
 public void myDivide2() throws Exception{
  cal.divide(6, 0);
  }
 
 /**
  * @Test 可以有timeout参数
  */
 @Test (timeout =100)
 public void myDivide3(){
  try {
     cal.divide(6, 4);
     Thread.sleep(100);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
}

 

分享到:
评论
1 楼 sunev_yu112112 2009-03-19  
也在学习中 支持一下

相关推荐

    JUnit3.X和4.X学习记录及用例

    JUnit是Java编程语言中最常用的单元测试框架之一,它使得开发者能够编写可自动运行的测试用例,以确保代码的质量和功能正确性。本资源包含了JUnit3.8.2和JUnit4.8.1两个版本的学习笔记和练习用例,帮助我们深入理解...

    Junit学习.rar

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档...

    Maven 2 学习笔记.txt

    ### Maven 2 学习笔记 #### 一、Maven 项目的基本结构及创建 Maven使用特定的目录结构来组织项目文件,通过`mvn archetype:create`命令可以快速创建项目模板。例如: ```shell mvn archetype:create -DgroupId=...

    0基础java笔记(自记)

    继承是面向对象编程的重要特征之一,用于建立类之间的层次关系。 **1. 继承关键字** - `extends`: 表示一个类继承另一个类。 - `implements`: 表示一个类实现了某个接口。 **2. extends与implements的区别** - ...

    Maven3实战笔记(全)

    2. **仓库依赖管理**:Maven的核心功能之一是管理项目依赖关系。通过在`pom.xml`文件中声明项目依赖,Maven能够自动下载所需的库文件,并解决依赖冲突。中央仓库是Maven默认的依赖来源,但也可以自定义私有仓库。 3...

    webwork学习笔记

    ### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...

    UiAutomator学习笔记

    UiDevice类是UiAutomator的核心组件之一,提供了多种方法用于模拟用户交互行为。 ##### 2-1 UiDevice类介绍 UiDevice类提供了许多方法来模拟用户的触摸和按键事件,比如按压Home键。 - **方法一**:`UiDevice....

    CCNotePadforMM很好的源码 基于Android开发项目

    在移动开发领域,Android作为全球最广泛使用的操作系统之一,其应用开发一直是开发者关注的焦点。"CCNotePad for MM"是一个基于Android平台的源码项目,对于学习Android开发的程序员来说,这是一个极好的参考资料。...

    个人资料管理工具1220.zip

    2. **Java语言**:作为标签之一,Java是一种广泛使用的跨平台编程语言,以其“一次编写,到处运行”的特性著名。Java的类库丰富,适合开发各种应用程序,包括桌面应用和个人资料管理工具。开发者可能利用Java的Swing...

Global site tag (gtag.js) - Google Analytics