首先须导入JUnit包:所在项目右击->Build Path->Add Libraries->选择JUnit->选择一个版本->Finish

一.手动生成

1.测试方法,必须符合下列条件

* 方法必须声明成:public,void

* JUnit3方法名必须以test开头,JUnit4则不需要

* 方法无参数

如:

JUnit3:Public void testAdd(){}

JUnit4:@Test (org.junit.Test)

Public void AddTest(){}

2. JUit3 与 JUit4的区别

源码和测试代码分开放在不同的Source Folder,测试代码所在的包名最好和源码中的包名一一对应。JUnit3测试方法中的类必须继承TestCase(junit.framwork.TestCase);而JUnit4类则不需要继承任何类,但在方法前须加上注解@Test(org.junit.Test)此测试方法,标注该程序是以JUnit的方式来运行的。

JUit3:在方法前加上TestCase类的方法setUp(),在执行每一次测试方法之前都会被调用,可把在测试方法中都需要的程序放在这里;最后加上tearDown()方法,在执行每一次方法后都会被调用。

JUit4:与JUit3不同的是,在JUit4中是在方法前用注解

@BeforeClass:globeInit(),无论执行多少测试方法,它只执行一次,且运行在最前

@Before:把方法注解成Before,init()与JUit3中的setUp()方法作用一样

@After:把方法注解成After,destroy()与JUit3中的tearDown ()方法作用一样

@AfterClass:无论执行多少测试方法,它只执行一次,且运行在最后

下面分别以JUit3和JUit4为例子来运行测试:

要测试的类

package com.sinyee.unit;
public class ArrayUnit {
/**
*传入一个数组,返回该数组的最大值
* @param array
* @return
*/
public int getMaxValue(int[] array) throws Exception {
if (array == null) {
throw new NullPointerException("空指针异常");
}
if (array.length == 0) {
throw new ArrayIndexOutOfBoundsException("数组不能为空!");
}
int temp = array[0];
for (int i = 1; i < array.length; i++) {
if (temp < array[i]) {
array[i] = temp;
}
}
// 取出该数组的最大值
return temp;
}
}
1)用JUit3测试

Junit3测试代码

package com.sinyee.unit;

import junit.framework.TestCase;

public class ArrayTest extends TestCase {

    // 设置类的成员变量,可以供所有的方法调用

    private ArrayUnit aUnit;

    /**
*
* 该setUp()方法为TestCase里面的方法
* 作用:在每次执行调用测试方法之前,会先调用该setUp方法
*/
@Override
protected void setUp() throws Exception {
// 实例化数组工具对象
aUnit = new ArrayUnit();
System.out.println("setUp()");
} /**
*
* 求数组最大值的测试用例1:数组不为空
*/ public void testGetMaxValue1() {
// 定义一个array数组
int[] array = { 40, 3, 2, 6, 9, 30, 4 };
try {
// 调用求数组最大值方法
int actual = aUnit.getMaxValue(array);
// 期望值为40
int expected = 40;
// 断言actual==expect
assertEquals(expected, actual);
} catch (Exception e) {
e.printStackTrace();
fail();
}
} /**
*
* 求数组最大值的测试用例2:数组为空
*/
public void testGetMaxValue2() {
// 定义一个array数组
int[] array = {}; // 实例化数组对象
ArrayUnit aUnit = new ArrayUnit();
try {
// 调用求数组最大值方法
aUnit.getMaxValue(array); // 若上面的方法有抛出异常,则fail()方法将不会被调用
fail();
} catch (Exception e) {
// 断言该异常为ArrayIndexOutOfBoundsException该类型的异常,且消息为"数组不能为空!"
assertEquals(ArrayIndexOutOfBoundsException.class, e.getClass());
assertEquals("数组不能为空!", e.getMessage());
}
} /**
*
* 求数组最大值的测试用例3:空指针异常
*/
public void testGetMaxValue3() {
int[] array = null;
ArrayUnit aUnit = new ArrayUnit();
try {
aUnit.getMaxValue(array);
fail();
} catch (Exception e) {
// 断言该异常为NullPointerException该类型的异常,且消息为"空指针异常"
assertEquals(NullPointerException.class, e.getClass());
assertEquals("空指针异常", e.getMessage());
}
}
@Override
protected void tearDown() throws Exception {
System.out.println("tearDown()");
}
}

2)用JUit4测试

测试代码:

package com.sinyee.unit;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore; import org.junit.Test; /**
*
* Junit4的测试类 该类无需继承任何类,测试方法无需与test开头
*/ public class ArrayUnitTest { private ArrayUnit aUnit; /**
* 把方法注解为@Before,效果与JUnit3中的setUp()方法一样
*/
@Before
public void init() {
aUnit = new ArrayUnit();
} /**
* Junit4须加上@Test此测试方法,标注该程序是以Junit的方式来运行的 测试数组不为空
*/
@Test
public void getMaxValueTest() {
int[] array = { 3, 6, 5, 7, 4, 8, 12, 0 };
try {
int actual = aUnit.getMaxValue(array);
int expected = 12;
// 断言expected==actual
// Assert.assertEquals(expected, actual); // 或者也可以直接通过静态导入该Assert类的所有方法 import static org.junit.Assert.*;
assertEquals(expected, actual);
} catch (Exception e) {
e.printStackTrace();
fail();
}
} /**
* 测试数组长度为零时,断言会抛出异常
*
* @throws Exception
*/
@Test(expected = ArrayIndexOutOfBoundsException.class)
public void getMaxValueTest2() throws Exception {
int[] array = {};
aUnit.getMaxValue(array);
} /**
* 测试数组为null时,断言会抛出空指针异常
*
* @throws Exception
*/
@Test(expected = NullPointerException.class)
public void getMaxValueTest3() throws Exception {
int[] array = null;
aUnit.getMaxValue(array);
} /**
* 当测试用例还未完成时,可用注解@Ignore来标记这测试用例还未完成
*/
@Test
@Ignore
public void getMaxValueTest4() { } /**
* 把方法注解为@After,效果与JUnit3中的tearDown()方法一样
*/
@After
public void destroy() {
} }
3).术语

Errors程序出错

Failures断言失败

4).批量测试
4.1JUnit3
package com.sinyee.unit;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class AllTest extends TestCase {
// 若要实现批量测试的话,须加上一个方法
public static Test suite() {
TestSuite tSuite = new TestSuite(); // 添加计算器测试类
tSuite.addTestSuite(CalculateTest.class); // 添加数组最大值测试类
tSuite.addTestSuite(ArrayTest.class); // 添加堆栈测试类
        tSuite.addTestSuite(StackTest.class);
return tSuite;
}
}

4.2JUnit4

package com.sinyee.unit;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class)
@SuiteClasses( { CalculateUtilTest.class, ArrayUnitTest.class,
StackUtilTest.class, StringUtilTest.class })
public class TestAll {
}

二.自动生成

选择所要测试的类,右击->New->选择Java下的Junit项目中的Junit Test Case,根据自己所要测试的版本类型选择进行操作.

三.WEB测试

需在lib包下拷入几个jar包:httpunit-1.7文件夹的lib目录下的httpunit.jar以及jars目录下的。

例:

package com.junit.action;
import static org.junit.Assert.*;
import java.io.IOException;
import org.junit.Test;
import org.xml.sax.SAXException;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class UserLoginActionTest {
/**
* 测试用正确的网址登录,断言登录成功
*/
@Test
public void testDoGetHttpServletRequestHttpServletResponse() {
//创建出模拟的浏览器对象
WebConversation wc=new WebConversation();
//创建出get请求
WebRequest wRequest=new GetMethodWebRequest("http://localhost:8088/JUnitUserManage/UserLogin.html");
try { //使用浏览器获取该请求的响应内容
wc.getResponse(wRequest);
} catch (IOException e) { e.printStackTrace();
} catch (SAXException e) { e.printStackTrace();
}
} /**
* 测试用一个不存在的地址登录,断言抛出异常
* @throws SAXException
* @throws IOException
*/
@Test(expected=Exception.class)
public void testDoGetHttpServletRequestHttpServletResponse2() throws IOException, SAXException {
//创建出模拟的浏览器对象
WebConversation wc=new WebConversation(); //创建出get请求
WebRequest wRequest=new GetMethodWebRequest ("http://localhost:8088/JUnitUserManage/UserLogin2.html");
//使用浏览器获取该请求的响应内容
wc.getResponse(wRequest);
} @Test
public void testDoPostHttpServletRequestHttpServletResponse() {
//创建出模拟的浏览器对象
WebConversation wc=new WebConversation(); //创建Post请求
WebRequest wRequest=new PostMethodWebRequest ("http://localhost:8088/JUnitUserManage/UserLogin.html"); //模拟出请求所需要的参数
wRequest.setParameter("userName", "admin");
wRequest.setParameter("pwd", "admin");
try {
//获取该请求的响应内容
WebResponse wResponse=wc.getResponse(wRequest); //获取响应内容的实际地址
String actual=wResponse.getURL().toString(); //期望在用户名和密码正确的情况下,跳转到页 // 面"http://localhost:8088/JUnitUserManage/Success.jsp" String expected="http://localhost:8088/JUnitUserManage/Success.jsp"; //断言
assertEquals(expected, actual);
} catch (Exception e) {
e.printStackTrace();
fail();
}
} /**
* 测试失败页面的返回按钮的链接地址
* 断言是"UserLogin.html"
*/
@Test
public void testLink(){
//创建出模拟的浏览器对象
WebConversation wc=new WebConversation();
//创建出http://localhost:8088/JUnitUserManage/Failure.jsp:8088/JUnitUserManage/Failure.jsp该地址的get请求方式
WebRequest wRequest=new GetMethodWebRequest ("http://localhost:8088/JUnitUserManage/Failure.jsp");
//获取该请求的响应内容
try {
WebResponse wResponse=wc.getResponse(wRequest);
//根据链接显示内容,获取该连接
WebLink wLink=wResponse.getLinkWith("返回");
//获取该连接对应的href地址
String actual=wLink.getURLString();
//获取所期待的链接地址
String expected="UserLogin.html";
           assertEquals(expected, actual);
} catch (Exception e) {
fail();
}
}
}

JUnit java单元测试的更多相关文章

  1. java如何使用JUnit进行单元测试

    注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...

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

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

  3. Java单元测试框架 JUnit

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

  4. Maven的安装配置及初次创建项目与java单元测试工具JUnit

    Maven  安装     1.把maven安装包解压到某个位置     2.配置M2_HOME环境变量指向这个位置 3.在path环境变量中添加;%M2_HOME%\bin 配置镜像 国内的阿里云镜 ...

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

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

  6. JUnit 4 单元测试

    Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...

  7. Android之如何使用JUnit进行单元测试

    转的:http://www.blogjava.net/qileilove/archive/2014/05/19/413824.html Android中如何使用JUnit进行单元测试 在我们日常开发a ...

  8. Spring(3)—— Junit框架单元测试

    Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...

  9. Java单元测试技术1

    另外两篇关于介绍easemock的文章:EasyMock 使用方法与原理剖析,使用 EasyMock 更轻松地进行测试 摘要:本文针对当前业软开发现状,先分析了WEB开发的技术特点和单元测试要解决的问 ...

随机推荐

  1. SVN提交忽略*.class、.classpath、.mymetadata、.project、.settings、.myeclipse和其他非版本控制文件

    1.忽略*.class 在TortoiseSVN -->setting(设定)--规设置 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVrZTY ...

  2. Socket 学习(三).3 TCP UDP 图解

    TCP 照我的理解就是 发送 和接收 不能用 同一个端口. 下面是 UDP的: 我的理解是 tcp 是 连接模式,udp 是断开模式.这里有2条连接线,就是跟 上面 Socket 的最大区别,udpC ...

  3. Cocos2d-x3.0之路--02(引擎文件夹分析和一些细节)

    关于怎么搭建好开发环境的我就不写了,网上非常多. 那么 我们来看看 引擎文件的文件夹 所谓知己知彼 百战不殆嘛 先说一下setup.py 这个文件是有关配置的python文件,比方我们在进行andro ...

  4. Web API-路由(一)

    这一篇文章描述了ASP.NET API如何将HTTP请求路由到控制器. 如果你熟悉ASP.NET MVC,Web API路由和MVC路由非常相似,主要的不同地方是Web API使用HTTP方法,而不是 ...

  5. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  6. OCP-1Z0-051-题目解析-第13题

    13. View the Exhibit and examine the structure of the PRODUCTS table. You need to generate a report ...

  7. leetcode第六题--ZigZag Conversion

    Problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...

  8. 记第五届山东省ACM程序设计比赛——遗憾并非遗憾

    记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室歇息了一 ...

  9. .NET大型B2C开源项目nopcommerce解析——项目结构

    .NET大型B2C开源项目nopcommerce解析——项目结构 编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书.首先nopcom ...

  10. Memcached在.Net中的基本操作

    Memcached在.Net中的基本操作 一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅 ...