JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用。 对不同性质的被测对象,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。以下以Class测试为例讲解。

测试步骤:

  1 导入junit4相关的jar包

  (选中java工程,点击鼠标右键--->选择properties---->在窗口中选Java Build Path---->在右侧点击Add Library---->在弹出的窗口列表中选中Junit---->下一步----->Junit 4(我用的是Junit 4)---->finish)

  2 可以在要测试的类new出测试类,选setUp,next选中要测试的方法,系统会 自动生成相应测试方法,修改相应的方法里内容。

也可以点击src--->右键--->new--->Test Junit Case

      在test方法中写测试方法。

       也可以自定义测试方法,不过要加上@Test的注解,方法格式为 public void testXXX()throws Exception{     }

       例如:

          @Test
            public void testadd() throws Exception{
          }

  3 修改测试类(先new被测试类的实例,然后对方法进行单个测试(eg:assertEquals(8, calculator.getResult())))

  4 run as junit测试(可以显示出Outline窗口,选中要测试的测试类,在Outline中选中要测试的方法右击run as Junit test)

代码实例:

  被测试类:

public class Calculate {
//加法运算
public int sum(int x,int y){
return x+y;
}
//减法运算
public int sub(int x,int y){
return x-y;
}
}

测试类:

import static org.junit.Assert.*;
import junit.framework.TestCase;
import org.junit.Test;

public class CalculateTest extends TestCase{

Calculate calculate = new Calculate();//先new出被测试类的实例对象
@Override
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
}

@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
}

@Test
public void testSum() {
assertEquals("测试加法", 4, calculate.sum(1, 3));//进行测试
}

@Test
public void testSub() {
assertEquals("测试减法", 2, calculate.sub(4, 3));//进行测试
}

}

大家有兴趣深入研究还可以了解:

   Junit本身是围绕着两个设计模式来设计的:命令模式(JUnit Test Case)和集成模式(Junit Test Suite).

简单的说:JUnit Test Case是进行单个的方法测试。而Junit Test Suite是进行集合(集合中可以包括多个Test Cas和Test Suite)测试的。

代码实例如下:

Test Case单个测试:

例如,我们要测试Money的Add方法,可以如下: 
public class MoneyTest extends TestCase { //TestCase的子类 
public void testAdd() { //把测试代码放在testAdd中 
Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化 
Money m14CHF= new Money(14, "CHF"); 
Money expected= new Money(26, "CHF");//预期的结果 
Money result= m12CHF.add(m14CHF); //运行被测试的方法 
Assert.assertTrue(expected.equals(result)); //判断运行结果是否与预期的相同 
} 
}

  如果测试一下equals方法,用类似的代码,如下: 
public class MoneyTest extends TestCase { //TestCase的子类 
public void testEquals() { //把测试代码放在testEquals中 
Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化 
Money m14CHF= new Money(14, "CHF");

Assert.assertTrue(!m12CHF.equals(null));//进行不同情况的测试 
Assert.assertEquals(m12CHF, m12CHF); 
Assert.assertEquals(m12CHF, new Money(12, "CHF")); // (1) 
Assert.assertTrue(!m12CHF.equals(m14CHF)); 
} 
}

  当要同时进行测试Add和equals方法时,可以将它们的各自的初始化工作,合并到一起进行,形成测试基础,用setUp初始化,用tearDown清除。如下: 
public class MoneyTest extends TestCase {//TestCase的子类 
private Money f12CHF;//提取公用的对象 
private Money f14CHF;

protected void setUp() {//初始化公用对象 
f12CHF= new Money(12, "CHF"); 
f14CHF= new Money(14, "CHF"); 
} 
public void testEquals() {//测试equals方法的正确性 
Assert.assertTrue(!f12CHF.equals(null)); 
Assert.assertEquals(f12CHF, f12CHF); 
Assert.assertEquals(f12CHF, new Money(12, "CHF")); 
Assert.assertTrue(!f12CHF.equals(f14CHF)); 
}

public void testSimpleAdd() {//测试add方法的正确性 
Money expected= new Money(26, "CHF"); 
Money result= f12CHF.add(f14CHF); 
Assert.assertTrue(expected.equals(result)); 
} 
}

Test Suite集合测试:

public class MoneyTest extends TestCase {//TestCase的子类 
.... 
public static Test suite() {//静态Test 
TestSuite suite= new TestSuite();//生成一个TestSuite 
suite.addTest(new MoneyTest("testEquals")); //加入测试方法 
suite.addTest(new MoneyTest("testSimpleAdd"));

suite.addTest(new MoneyTest(MoneyTest.class)); //以类为参数 
return suite; 
} 
}  

java单元测试(Junit)的更多相关文章

  1. Java单元测试(Junit+Mock+代码覆盖率)---------转

    Java单元测试(Junit+Mock+代码覆盖率) 原文见此处 单元测试是编写测试代码,用来检测特定的.明确的.细颗粒的功能.单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的. 单元测 ...

  2. Java单元测试(Junit+Mock+代码覆盖率)

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  3. java单元测试(Junit)

    Eclipse最基本的模块测试 1:首先创建一个java工程,在工程中创建一个被单元测试的Student数据类,如下: package UnitTest; public class Student { ...

  4. Java 单元测试(Junit)

    在有些时候,我们需要对我们自己编写的代码进行单元测试(好处是,减少后期维护的精力和费用),这是一些最基本的模块测试.当然,在进行单元测试的同时也必然得清楚我们测试的代码的内部逻辑实现,这样在测试的时候 ...

  5. JAVA单元测试Junit

    1.为什么要用Junit 做了很多项目,几乎没怎么用过Java的单元测试,是因为它没有用吗?显然不是,是自己的开发方式太不规范!对于大型的软件项目,单元测试不仅有效实用,还非常有必要!它能够测试每个方 ...

  6. Java单元测试 Junit TestNG之介绍

    Junit是Java中默认的单元测试框架,通过注解的方式去识别测试方法 JUnit4 JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且 ...

  7. Effective Java单元测试JUnit - 就是爱Java

    实作了RoleImpl class,现在要开始单元测试了,或许你会觉得奇怪,才刚做好一个class而已,它并没有商业规则,只有getter/setter与clone(),那是要测试什么呢?没错,传统上 ...

  8. Java 单元测试Junit

    @Test @Before @After 测试方法运行前执行Before动作(比如创建资源),运行后执行After动作(比如销毁资源) @BeforeClass @AfterClass 测试类运行前执 ...

  9. Java 工具 JUnit单元测试

    Java 工具 JUnit单元测试 @author ixenos 1.1.   JUnit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个 ...

  10. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...

随机推荐

  1. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  2. 积累的VC编程小技巧之组合框

    1.如何正确的得到ComBox的指针 CComboBox *mComb = (CComboBox*)GetDlgItem(IDC_DuanCB); CComboBox *mComb = (CCombo ...

  3. password加密问题

    password加密问题 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来 ...

  4. onkeypress事件.onkeydown事件.onkeyup事件

    onkeypress事件是在按键開始按的时候发生: onkeydown事件是在按键已经按下的时候发生: onkeyup事件是在按键松开(释放)的时候发生.

  5. Linux 核心阅读工具vim+ctags+cscope+taglist

    今天.介绍vim+ctags+cscope+taglist的内核阅读配置. 当使用过之后,我相信大部分人都会舍弃之前的Eclipse(我就是活生生的一个样例).我们先来看看实现的界面是怎么样的: 我们 ...

  6. Windows下visual studio code搭建golang开发环境

    Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...

  7. hdu2151(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151 分析: DP.思路:全盘扫描.     i表示时间,l表示第几棵树,方程:     step[i ...

  8. 设计模式之十:观察者模式(Observer)

    观察者模式: 在对象之间定义了一种一对多的依赖关系.当一个对象改变它的状态时,全部依赖它的对象会自己主动接收通知并更新自己的状态. Define a one-to-many dependency be ...

  9. 【译】ASP.NET MVC 5 教程 - 9:添加新字段

    原文:[译]ASP.NET MVC 5 教程 - 9:添加新字段 在本节中,我们将使用Entity Framework Code First 数据迁移功能将模型类的改变应用到数据库中. 默认情况下,当 ...

  10. poj1463(树形dp)

    题目链接:http://poj.org/problem?id=1463 题意:有N个点,每两个点至多只有一条边,如果在一个结点上放一个士兵,那他能看守与之相连的边,问最少放多少个兵,才能把所有的边能看 ...