




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JUnit及STC进行单体测试 (一) 目的与目标 了解单体测试的基本知识 学会编写基于JUnit框架的单体测试代码 能够利用JUnit框架进行单体测试 可以利用STC及Cactus对服务器端java代 码进行测试 学会编写简单的测试用例 课程概述 本部分内容介绍了单体测试的基本概念、 JUnit的框架结构、利用JUnit框架进行单 体测试的方法以及在eclipse环境中如何使 用JUnit 关于如何利用STC及Cactus对服务器端 java代码进行测试的方法在第二部分中介 绍 引言 在你不知道如何测试代码之前,就不应该编写 程序。而一旦你完成了程序,测试代码也应该 完成。除非测试成功,你不
2、能认为你编写出了 可以工作的程序 。 当你试图打印输出一些信息或调试一个表 达式时,写一些测试代码来替代那些传统的方 法。 -Martin Fowler(敏捷开发方法的创始人之一 ) 单体测试的基本知识 单体测试是什么? 单体测试什么时候做? 单体测试由谁来做? 单体测试测什么? 单体测试不测什么? 单体测试是什么? 单体测试是从程序员的角度编写的,它 确保类的某个特定方法能成功执行一系 列特定的任务。每个测试都确保只要给 定输入,方法将输出预期的结果 单体测试什么时候做? Code a little, test a little Code all,test all 极限编程(XP)的核心原则
3、之一就是在 编写功能代码前先编写测试用例。 单体测试由谁来做? 单体测试是程序员的事 单体测试是编码的一部分 单体测试是程序员必备的一项基本素质 传统的单体测试是针对程序的函数、过 程或完成某一功能的程序块;简单说来 就是实际测试类的成员函数。 所有的函数都要测吗? 不是! 单体测试测什么? 单体测试测什么? 核心方法及可能引入错误的地方 特定边界条件 复杂算法 复杂的业务逻辑 需求变动频繁之处 单体测试不测什么? 单体测试不测构造函数 单体测试不测setter()、getter()方法,如 ActionForm的大部分方法 单体测试不测框架 class HelloWorldBad /* ge
4、t Hello World */ public String sayHello() return Hello World; /* Test */ public static void main(String args) HelloWorldBad world = new HelloWorldBad(); System.out.println(world.sayHello(); 早期的单体测试方式 缺点缺点: 代码膨胀代码膨胀 由于加入了测试,所以产品代码比所需要的要大。但我们不想交 付测试代码,而只想交付产品。 测试不可靠测试不可靠 既然 main() 是代码的一部分,main() 就对其他开
5、发者通过类接口 无法访问的私有成员和方法享有访问权。出于这个原因,这种测 试方法很容易出错。 缺乏对自动测试的支持缺乏对自动测试的支持 要进行自动测试,必须能够方便的收集测试结果以及对测试用例 进行筛选,利用main()方法进行测试要做到这两点就比较麻烦。 JUnit简介 帮助开发人员测试Java代码的测试框架 Open Source() 由Erich Gamma 和 Kent Beck(极限编程创 始人)设计并实现 目的:提高开发效率,提升编码质量 JUnit定位 JUnit isJUnit is not 作用范围 单体测试集成测试 系统结构 框架,架构完整系统 使用等级 工具方法论 测试用
6、例 手动产生自动产生 测试实现代码 部分手写全自动 JUnit架构 run() Test fName setUp() runTest() tearDown() run() TestCase run() addTest() TestSuite * TestResult junit.framework assertTrue() assertEquals() . Assert junit.textui.TestRunnerjunit.swingui.TestRunner JUnit 使用 TestCase(test.) Assert(断言):failure与error的区别 Run TestCase
7、(执行用例) TestSuite 示例1(HelloWorld) package pany; public class HelloWorld public String sayHello() return Hello World; 产生测试用例 HelloWorld测试代码 package pany; import junit.framework.*; public class HelloWorldTest extends TestCase private HelloWorld helloWorld = null; public HelloWorldTest (String name) sup
8、er(name); protected void setUp() throws Exception super.setUp(); helloWorld = new HelloWorld(); 命名规则:xxxTest (类名称后加”Test”) 命名规则:xxxTest (类名称后加”Test”) HelloWorld测试代码(续) protected void tearDown() throws Exception helloWorld = null; super.tearDown(); public void testSayHello() String expectedReturn = H
9、ello World; String actualReturn = helloWorld.sayHello(); assertEquals(return value, expectedReturn, actualReturn ); 命名规则:testXXX (测试方法前加”test”) 断言(判断类实例的特性 是否和你想象的一致) 示例2(Car) package pany; public class Car public int getWheels() return 4; setUp()、 tearDown() 方法 setUp()用来初始化信息 tearDown()用来撤销初始化信息,释放
10、数 据库连接等。 Car测试代码 package pany; import junit.framework.*; public class CarTest extends TestCase private Car car = null; public CarTest(String name) super(name); protected void setUp() throws Exception super.setUp(); car = new Car(); Car测试代码(续) protected void tearDown() throws Exception car = null; su
11、per.tearDown(); public void testGetWheels() int actualReturn = car.getWheels(); assertEquals(success, 4, actualReturn); 选择一个 Test Runner eclipse Test Runner SwingUI Test Runner junit.swingui.TestRunner.run(HelloTest.class) TextUI Test Runner junit.textui.TestRunner.run(HelloTest.class) 不推荐使用 TestSui
12、te 可以看作是包含TestCase的容器。 可以在一个suite里加入多个测试的类, 也可以加入不同类的多个测试方法。 通常可以在将一个包下的TestCase包含到 一个suite中。 示例3:TestSuite package pany; import junit.framework.*; public class AllTests public static Test suite() TestSuite suite = new TestSuite(Test for pany); suite.addTestSuite(HelloWorldTest.class); suite.addTest
13、Suite(CarTest.class); return suite; 断言类别 JUnit使用步骤 覆盖 setUp() 、 tearDown()方法 编写测试方法 test() 应用断言 Assert() 运行测试用例 编写 TestSuite 编写测试用例 什么是测试用例? 测试用例测试用例是一个文档,描述输入、动作 和一个期望的结果,其目的是确定应用 程序的某个特性是否正常的工作。 用Excel编写用例文档 用代码编写TestCase 例 反例 结论 执行单体测试用例结果不能通过查看页 面或数据库来验证,否则就成了系统测 试,失去了单体测试自动化的意义。 几个误区 误区1 单体测试会占
14、用我很多编码的时间,我 应该拿出更多的时间去完成功能。 单体测试的确会占用我们很多时间, 甚至它和主要编码的时间差不多,但 它会提高代码质量,使我们项目的整 体时间缩短。 单体测试的几个误区 误区2 我的程序第一次做完了,我去执行单体 测试,以后我的程序改变了,我就不管 了。 JUnit是一种回归测试框架,因此代码改 变了,一定要维护并重新执行测试代码。 练习 商店促销 男性赠送剃须刀,女性赠送护手霜;根 据性别取得赠品。 设计:String gainPresent(String sex) if sex等于 “男性” return “剃须 刀”; else return “护手霜”; 参考实现代码 /* ver1 存在bug */ package pany;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 9144-2025普通螺纹优选系列
- GB/T 45746-2025市场、民意和社会调查质量检验要求
- GB/T 13213-2025肉糜类罐头质量通则
- 2025年中国抗菌沐浴露行业市场全景分析及前景机遇研判报告
- 2025年中国建盏行业市场全景分析及前景机遇研判报告
- 2025-2030年中国型材行业市场全景调研及投资价值评估咨询报告
- 建筑节能报告用指标的确定
- 税务师老师讲解课件
- 2025年中国智能防火墙行业市场发展前景及发展趋势与投资战略研究报告
- 2022-2027年中国带鱼捕捞行业市场调查研究及投资战略研究报告
- GB/T 18314-2001全球定位系统(GPS)测量规范
- 工贸行业重点可燃性粉尘目录(2022版)
- 近代史期末复习试题
- 教学设计 完整版:Summer holiday plans
- 2022年武汉市法院书记员招聘考试题库及答案解析
- 湖南省邵阳市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 齐齐哈尔大学教师教育实践中心申报材料汇总
- 中考物理总复习课教案(第一轮)
- 工厂开工试车方案
- 变电站土石方工程施工方案(42页)
- 英语专业四级写作评分标准
评论
0/150
提交评论