- 浏览: 511959 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
JUnit单元测试一共要注意一下几点:
(1)import junit.framework.TestCase 和 junit.textui.TestRunner;
(2)继承junit.framework.TestCase ;
(3)自行添加一个main方法 中调用TestRunner.run(测试类名.class);
(4)有一个调用super(String)的构造函数;
以上都是JUnit必有的特征,除以上外,我们发现有许多以test开头的方法,而这些方法正是我们要测试的方法,Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法,同时提供很多断言的方法,
常用断言方法
assertEquals("失败提示信息","期望数据","测试数据") 断言获取数据是否与所期望的相等
assertNotNull("失败提示信息","测试数据") 断言获取数据不为null,否则提示错误
assertNull("失败提示信息","测试数据") 断言获取数据是为null,否则提示错误
assertTrue("失败提示信息",测试数据blooean值) 断言获取数据是否为ture,否则提示错误
fail("失败提示信息"); 此方法一般放到异常处,遇到此方法,测试将停止!
assertSame("失败提示信息","期望数据","测试数据") 断言获取数据是否与所期望的相同
当我们写完所有方法策略后,JUnit测试如下图:
在方法页面中点击右键在“调试方式”或“运行方式”中点击“JUnit 测试”,就运行测试类!
在执行测试类时,执行的大概过程:
(1)先执行构造方法public OrgTypeDAOTest(String arg0) ;
(2)再执行初始化数据方法protected void setUp() ;
(3)再执行以test开头的测试方法;
(4)最后执行protected void tearDown()方法清理对象;
如果测试失败或者错误,将会显示一个红色的亮条;如果测试通过将显示绿色亮条;如下图
这样就把一个整个单元测试操作例子演示完成!
可能对于一个测试类中有多个方法要测试,对于后面看着的确有些困难,因此,我对上测试类进行简单的调整,如下代码:
import junit.framework.TestCase;
import junit.textui.TestRunner;
import com.zhjy.mock.SpringMock;
/**
* 举例测试类
*/
public class OrgTypeDAOTest extends TestCase { //(1)继承TestCase
//private OrgTypeDAO orgTypeDAO;
//private OrgTypeVO orgTypeVO;
//private String id ;
/**
* 构造方法
* @param arg0
*/
public OrgTypeDAOTest(String arg0) {
super(arg0);
}
/* 初时化方法
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
//测试初始话数据调用类 orgTypeDAO和 封装数据的对象orgTypeVO
}
/* 执行完清理方法
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
//清空 对象 ;==null
//orgTypeDAO =null;
//orgTypeVO =null;
super.tearDown();
}
/**
* 主函数
* @param args
*/
public static void main(String[] args){
TestRunner.run(OrgTypeDAOTest.class);
}
/**
* 测试方法
* Test method testOrgTypeInfo
*/
public void testOrgTypeInfo() {
//添加
String id = insertOrgTypeInfo();
//列表
orgTypeList();
//修改
updateOrgTypeInfo(id);
//查询
selectOrgTypeInfoById(id);
//校验
iExistOrgByOrgTypeId(id);
//测试是否重复数据方法(add)
isRepeatOrgTypeInfo(orgTypeVO.getName(),"");
//获取数据方法(根据名称)
selectOrgTypeIdByName(orgTypeVO.getName());
//删除
deleteOrgTypeInfo(id);
}
/*
*添加初始数据
*/
private void setOrgTypeVOAddInfo() {
orgTypeVO.setName("add中海测试");
orgTypeVO.setDescription("add中海测试");
orgTypeVO.setStatus("1");
}
/*
*添加初始数据
*/
private void setOrgTypeVOUpdateInfo() {
//orgTypeVO.setId(id);
orgTypeVO.setName("add中海测试");
orgTypeVO.setDescription("update中海测试");
orgTypeVO.setStatus("1");
}
/*
* 新增方法
* Test method for {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public String insertOrgTypeInfo() {
setOrgTypeVOAddInfo();
String id = null;
try{
id = orgTypeDAO.insertOrgTypeInfo(orgTypeVO);
}catch(Exception e){
fail("添加通用组织机构失败!");
}
return id;
}
/*
* 更新方法
* Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public void updateOrgTypeInfo(String id) {
setOrgTypeVOUpdateInfo();
orgTypeVO.setId(id);
try{
orgTypeDAO.updateOrgTypeInfo(orgTypeVO);
}catch(Exception e){
assertTrue("修改通用组织机构失败!", false);
}
//查询
orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
}
/*
* 获取数据方法(主健)
* Test method for {@link OrgTypeDAO#selectOrgTypeInfoById(java.lang.String)}.
*/
public void selectOrgTypeInfoById(String id) {
orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
assertTrue("无法查看一条通用机构名称信息!",orgTypeVO != null);
assertEquals("添加通用组织机构失败!", orgTypeVO.getName(), "add中海测试");
assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
}
/*
* 测试此通用组织机构是否被引用
* Test method for {@link OrgTypeDAO#iExistOrgByOrgTypeId(java.lang.String)}.
*/
public void iExistOrgByOrgTypeId(String id) {
boolean isfalse;
try {
isfalse = this.orgTypeDAO.iExistOrgByOrgTypeId(id);
assertFalse("通用组织机构校验错误!",isfalse);
} catch (DataAccessException e) {
assertTrue("通用组织机构数据操作错误!!",false);
} catch (ObjectNotFoundException e) {
assertTrue("id is null!!",false);
}
}
/*
* 删除
* Test method for {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)}.
*/
public void deleteOrgTypeInfo(String id) {
this.orgTypeDAO.deleteOrgTypeInfo(id);
orgTypeVO = this.orgTypeDAO.selectOrgTypeInfoById(id);
assertNull("删除通用组织机构失败!", orgTypeVO);
}
/*
* 获取数据方法(根据名称)
* Test method for {@link OrgTypeDAO#selectOrgTypeIdByName(java.lang.String)}.
*/
public void selectOrgTypeIdByName(String name) {
String orgtypeid = orgTypeDAO.selectOrgTypeIdByName(name);
//assertEquals(orgtypeid, id);
assertNotNull("未查出来通用组织机构ID!",orgtypeid);
}
/*
* 测试是否重复数据方法
* Test method for {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
*/
public
void isRepeatOrgTypeInfo(String name,String id) {
//setOrgTypeVOUpdateInfo();
OrgTypeVO orgtypetest = new OrgTypeVO();
orgtypetest.setId(id);
orgtypetest.setName(name);
boolean isTrue = orgTypeDAO.isRepeatOrgTypeInfo(orgtypetest);
//assertEquals("通用组织机构错误数据",isTrue, false);
assertTrue("通用组织机构错误数据", isTrue);
}
/*
* 列表方法
* Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#orgTypeList()}.
*/
public void orgTypeList() {
List list = orgTypeDAO.orgTypeList();
assertNotNull("无法获取通用机构名称列表list is null!",list);
}
}
处理过程:
(1)把所有以test开头的方法中的方法名称前的test去掉(例如把testOrgTypeList()改为orgTypeList()方法);
(2)同时添加一个以test开头的方法,并调用测试方法;这样做主要是因为执行测试时JUnit(除本身特有的方法出外)只执行以test为开头的方法;
(3)同时大家注意到我还把测试初始数据放到两个private方法中private void setOrgTypeVOAddInfo()和private void setOrgTypeVOUpdateInfo()方法中供调用;
大家可能认为很简单,就是这样简单的改动带来很大的方便,大家是否注意到,我以后运行测试用例时,只关心public void testOrgTypeInfo() 方法就行了,因为只要各个方法的断言策略定制完成,一般就不会再改动,因此,后期的回归测试还是验收测试,缩小了我们对测试的关注点,同时对后面写 test suite构建整体测试带来极大方便性!其中的好处相信只有使用才能体会!
说到这,就此暂告一段落!由于时间仓促,书写不规范和关于任何问题处敬请指出,相互探讨,后面将讨论《单元测试在整个项目中的整体构建》,谢谢!后续!
发表评论
-
onInterceptTouchEvent和onTouchEvent调用时序
2012-02-08 08:44 1040onInterceptTouchEvent和onTouchEv ... -
Android2.2.1广播大全
2012-01-11 17:29 910Android2.2.1广播大全 博 ... -
Android Gesture Detector
2012-01-06 16:09 1205Android Gesture Detector * ... -
在程序中设置android:gravity 和 android:layout_Gravity属性
2012-01-06 10:04 1568【Android布局】在程序中 ... -
Android应用程序基础 >> 任务栈和亲属关系(Activities and Tasks)
2012-01-05 10:26 1145Android应用程序基础 >& ... -
android 中使用socket使native和framework通信
2011-09-01 10:14 1199android 中使用socket使native和frame ... -
android aidl iBinder理解
2011-06-01 11:51 2061在android中有一个程序员大量使用的操作,就是bindse ... -
Android开发者指南(6) —— AIDL
2011-05-31 10:59 1287Android开发者指南(6) —— AIDL ... -
android 线程间的通信
2011-05-20 13:22 893近来找了一些关 ... -
Android Service学习之AIDL, Parcelable和远程服务
2011-05-20 11:51 1069AIDL的作用 由于每个应用程序都 ... -
有关Android线程的学习
2011-05-20 11:20 10321. Android进程 在了解Android ... -
(转载)Android下Affinities和Task
2011-05-19 16:30 852(转载)Android下Affinities和Tas ... -
Android的Launcher成为系统中第一个启动的,也是唯一的
2011-05-12 19:38 2156Android的Launcher成为系统 ... -
Launcher的启动过程
2011-05-12 19:36 22321. Launcher的启动过程 从网络上 ... -
android中使用jni,ndk的C语言回调方法
2011-05-12 19:19 6555android中使用jni,ndk的C ... -
典型应用之——将库打进apk
2011-05-12 19:19 2882典型应用之——将库打进apk (2010-12-17 1 ... -
一个打通jni,java framework,application三层的练习
2011-05-10 10:58 1163转自:http://blogold.chinaunix ... -
android eclipse 和 源码 情况下 引用第三方jar
2011-05-10 10:55 2477android eclipse 和 源码 情况 ... -
1.系统属性获取及设置中的设置值
2011-04-21 15:04 35101.系统属性获取及设置 android.os.SystemP ... -
给应用签名 uid.system platform 权限
2011-04-21 14:58 1478在生成的apk目录下放 signapk.jar platfo ...
相关推荐
【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...
简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。
需要将 JUnit4 单元测试包引入项目中,然后在 Eclipse 的 Package Explorer 中右键点击 Calculator 类,选择“New à JUnit Test Case”,系统将自动生成一个新类 CalculatorTest,里面包含一些空的测试用例。...
常见的单元测试框架有JUnit(Java)、pytest(Python)、NUnit(.NET)等,它们提供了丰富的API和功能来编写和执行测试用例。使用这些框架,可以轻松实现断言、测试套件组织、测试报告生成等功能。 五、最佳实践 1....
对Java单元测试有初步的了解,学会使用Junit开发自己的测试用例,并对被测试类进行测试。 1. 获取Junit。 2. Junit的安装与配置。 3. 利用Junit开发自己的测试用例,并对被测试类进行测试。
本文将详细介绍如何在 Maven 项目中运行 JUnit 5 测试用例实现,包括编写 JUnit 5 测试用例、引入 JUnit 5 依赖、在 Maven 项目中运行 JUnit 5 测试用例等。 JUnit 5 概述 JUnit 是 Java 单元测试的基础工具,...
软件测试基本路径法设计测试用例Junit单元测试归纳 软件测试基本路径法设计测试用例是软件测试中的一种重要方法,它可以帮助测试人员设计更加全面的测试用例,提高测试的效率和有效性。本文将介绍基本路径法设计...
Junit4是一款广泛使用的Java单元测试框架,它使得开发者能够方便地编写和运行测试用例,从而验证代码的正确性。本教程将深入探讨Junit4测试用例的使用,帮助你理解和实践其核心概念。 一、Junit4简介 Junit4是JUnit...
本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...
Java 测试用例 JUnit 教程 Java 是一种广泛使用的编程语言,而 JUnit 是 Java 测试框架中最流行的测试框架之一。JUnit 提供了一组丰富的断言方法,帮助开发者编写可靠的测试用例,从而提高代码质量。本教程旨在...
JUnit是一个流行的Java单元测试框架,它提供了一些基本的断言方法,如assertEquals、assertTrue、assertFalse等,以便开发者编写单元测试用例。JUnit框架还提供了一个TestRunner,可以自动地运行测试用例并显示测试...
软件测试基本路径法设计测试用例Junit单元测试.pdf 本资源主要介绍了软件测试中的基本路径法设计测试用例和Junit单元测试。下面将对其中涉及的知识点进行详细的解释。 一、基本路径法 基本路径法是一种软件测试...
"JUnit单元测试在Java中的应用" 在Java中使用JUnit单元测试是软件开发过程中不...使用JUnit单元测试框架可以帮助我们快速地编写单元测试用例,确保代码的正确性和可靠性。在Java中,JUnit是最流行的单元测试框架之一。
JUnit测试通常包含一系列名为@Test的方法,这些方法会在运行测试时被调用。每个@Test方法代表一个独立的测试场景。使用断言(如assertEquals、assertTrue等)来检查代码的行为是否符合预期。JUnit还提供了注解,如@...
例如,JUnit用于编写测试用例,DBUnit负责数据库相关的测试,Unitils提供ORM支持和进一步的测试便利,而Mockito则用来模拟复杂的依赖关系,使得测试更加独立和可控。了解和熟练使用这些工具,对于提升软件开发效率和...
本实例将深入探讨Junit测试的基本用法,包括简单单元测试和综合测试的实现。 一、Junit简介 Junit是由Ernst Berg和Kent Beck共同创建的开源项目,其主要目标是提供一个易于使用的接口来编写针对Java代码的测试用例...
JUnit 是一个流行的 Java 测试框架,它使得编写和执行测试用例变得简单和高效。 JUnit 提供了一个平台,允许开发者编写单元测试,即针对代码中的最小可测试单元进行的测试。它支持注解(annotations)来标记测试...
在Java编程领域,JUnit是一个广泛使用的单元测试框架,它使得开发者能够编写可重复运行的测试用例,确保代码的质量和稳定性。"JUnit in Java:真正的测试用例实战"这一主题涵盖了如何有效地使用JUnit进行测试实践的...
本文将深入探讨单元测试的概念、重要性以及如何创建有效的单元测试用例。 首先,理解单元测试的基本概念。单元测试是针对程序中的最小可测试单元进行的,这可能是函数、方法、类或对象。它的目标是确保这些单元在...