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. What is the difference between JRE,JVM and JDK?

    If you are a Java developer, it is very often that you think about understanding the JRE,JVM and JDK ...

  2. vc 基于对话框多线程编程实例——线程之间的通信

     vc基于对话框多线程编程实例——线程之间的通信 实例:

  3. 图像处理特征不变算子系列之Moravec算子(一)

    论文转载请注明出处:http://blog.csdn.net/kezunhai 1977年,Moravec提出了兴趣点(Points of Interests)的概念,并应用于解决Stanford C ...

  4. ios 上拉载入下拉刷新Dome

    为练手写了一个小的上拉载入很多其它下拉刷新的小的Dome . 没有太多的技术含量,仅仅是作为新手的启示用.是上一篇下拉载入的扩展.先看一下那个再看这个就easy非常多. Dome下载:http://d ...

  5. sql server2012附加的数据库问题

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM2NzUxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  6. 关于CodeReview(java)(转)

    关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来. 为什么要做 通过review规避一些代码层面的问题 提升可读性,方便后续 ...

  7. 吐槽CSDN编辑

    Perface 近期喜欢上了markdown.我认为它就是一些HTML标签的快捷键,用一些符号来取代标签,易学易读易用,何乐而不为呢?近期也喜欢用印象笔记来让我的记忆永存,确实它强大的收集能力让我迷上 ...

  8. Android Fragment使用

                     通常地 fragment做为宿主activity UI的一部分, 被作为activity整个view hierarchy的一部分被嵌入. 有2种方法你能够加入一个fr ...

  9. 查看mysql一些命令的数据库状态

    命令: show processlist;  假设是root帐号,你能看到全部用户的当前连接.假设是其他普通帐号,仅仅能看到自己占用的连接.   show processlist;仅仅列出前100条, ...

  10. Android四个多线程分析:MessageQueue实现

    Android四个多线程分析:MessageQueue的实现 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线 ...