首页 E4_JUnit单元测试(1)

E4_JUnit单元测试(1)

举报
开通vip

E4_JUnit单元测试(1)实验4:JUnit单元测试 董瑞志 常熟理工学院软件工程系 实验目的 理解手工编写单元测试的基本方法; 编写简单的基于JUnit的单元测试用例; 课时安排 2课时 实验内容 问题1:软件测试的定义及特点。 软件测试定义:软件测试时一种实际输出与预期输出间的审核或者比较的过程 软件测试的特点:软件测试的开销大 问题2:描述软件测试相关的信息流 信息流输入: 软件配置、测试配置 信息流输出: 调试、测试结果分析 JUnit初步 单元测试可以描述为“确保方法接收预期范围内的输入,并且对每个测试输入返回预期的结果。”单元...

E4_JUnit单元测试(1)
实验4:JUnit单元测试 董瑞志 常熟理工学院软件 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 系 实验目的 理解手工编写单元测试的基本方法; 编写简单的基于JUnit的单元测试用例; 课时安排 2课时 实验内容 问题1:软件测试的定义及特点。 软件测试定义:软件测试时一种实际输出与预期输出间的审核或者比较的过程 软件测试的特点:软件测试的开销大 问题2:描述软件测试相关的信息流 信息流输入: 软件配置、测试配置 信息流输出: 调试、测试结果分析 JUnit初步 单元测试可以描述为“确保方法接收预期范围内的输入,并且对每个测试输入返回预期的结果。”单元测试是独立的一个工作单元(一个工作单元是一项任务,它不依赖于其他任何任务的完成)。在Java应用程序中,“独立的一个动作单元”常常指的是一个方法。 1. 编写Calculator类及其手工测试类testCalculatorManual 图1:手工测试Calculator 单元测试的一条准则是“若程序的某项功能没有经过测试,那么该功能基本等于不存在”。这里的add方法是Calculator的核心功能之一,这里我们先手工编写测试类testCalculatorManual。 2. 用JUnit进行单元测试 (1)JUnit有很多功能可以简化测试用例的编写和运行,我们编写Test Case—TestCalculatorWithJUnit如下。 图2:使用JUnit 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 测试脚本 在Calculator类中添加subtract(), multiply(),divide()后,如何编写手工测试用例和基于JUnit框架的测试用例应该如何编写? (2)使用默认的TestSuite, 显式调用Junit TestRunner 图3:显式调用Junit testRunner /* * 调用由testRunner自动创建的TestSuite对象 * 默认的TestSuite对象将扫描测试类,找出所有以test开头的方法, * 为每一个testXXX方法都创建一个TestCase实例。 * 要调用的方法的名称会传给TestCase的构造函数, * 这样每个实例就拥有了一个独一无二的标示。 */ public static TestSuite suite(){ return new TestSuite(TestCalculatorWithJunit.class); } public static void main(String[] args) { //junit.textui.TestRunner.run(TestCalculatorWithJunit.class); junit.swingui.TestRunner.run(TestCalculatorWithJunit.class); } (3)创建TestAll 缺省的TestSuite设计目的在于让测试人员可以轻松应对简单的测试情形。但是当要组合多个Suite,把它作为主Suite的一部分,特别是这些suite来自不同的包;或者要运行多个Suite、在一个Suite中选一些测试来执行……等情况下,这就需要创建自己的suite对象。 Junit Framework中,Test接口如下: public interface Test { /** * Counts the number of test cases that will be run by this test. */ public abstract int countTestCases(); /** * Runs a test and collects its result in a testResult instance. */ public abstract void run(TestResult result); } 而TestSuite的addTest(): public void addTest(Test test) { fTests.addElement(test); } 即可以为TestSuite添加TestSuite也可以添加TestCase,这就为创建特殊的suite或者组合出TestAll创造了方便。 通常情况下,TestAll仅仅包括一个静态的suite(),该方法会注册应用程序需要定期执行的所有Test对象(包括TestCase和TestSuite)。TestAll的suite()方法细节如下: public static Test suite(){ TestSuite suite=new TestSuite("All tests will be executed"); suite.addTestSuite(TestCalculatorWithJunit.class);        return suite; } JUnit单元测试的步骤 1. Junit三重唱 当你需要编写更多的TestCase的时候,你可以创建更多的TestCase对象。当你需要一次执行多个TestCase对象的时候,您可以创建一个TestSuite对象或使用缺省的TestSuite对象进行封装。为了执行TestSuite,需要使用TestRunner。通过TestRunner的执行生成TestResult对象。(如图5所示) 图5:JUnit成员三重唱,共同产生测试结果 (1) TestCase测试用例 用户定义的TestCase必须扩展junit.framework.TestCase类,它以testXXX方法的形式包含了一个或多个测试。一个测试用例把具有公共行为的测试归入一组。 (2) testSuite测试套装 一个测试套装可以把多个测试用例或测试套装封装为一组 (3) testRunner测试运行器 测试运行器用来运行测试套装,Junit提供良种典型的测试运行器: junit.swingui.TestRunner 和 junit.textui.TestRunner 2.JUnit核心类 JUnit核心类及其简介如下表所示: 表1:JUnit核心类 3.JUnit单元测试的步骤 (1) 重载setUp(),封装测试环境初始化及测试数据准备; (2) 设计测试方法,以testXXX命名。 (3) 在测试方法中使用断言方法如assertEquals(),assertTrue()等。JUnit中断言方法如表2所示。 (4) 设计测试套件,或使用缺省的测试套件,调用TestRunner执行测试脚本,生成测试结果; (5) 重载tearDown()析构测试环境,执行收尾动作 表2:断言方法 assertEquals(expected, actual) assertEquals(message, expected, actual) assertEquals(expected, actual, delta) - used on doubles or floats, where delta is the difference in precision assertEquals(message, expected, actual, delta) - used on doubles or floats, where delta is the difference in precision assertFalse(condition) assertFalse(message, condition) assertNotNull(object) assertNotNull(message, object) assertNotSame(expected, actual) assertNotSame(message, expected, actual) assertNull(object) assertNull(message, object) assertSame(expected, actual) assertSame(message, expected, actual) assertTrue(condition) assertTrue(message, condition) 案例分析 1.三角形问题 设计类Triangle及其测试类testTriangle,其类图如图6所示。Triangle中包含三个属性borderA, borderB, borderC,三遍取值都在(0,20]集合中的自然数;一个构造函数,isTriangle()判断三角形三边是否构成三角形,isType()判断在输入的三边形成三角形的情况下所形成的三角形的具体类型:等边三角形、等腰三角形还是不等边三角形。 图6:Triangle及其测试类 testTriangle类定义如下: (1) 重载setUp()方法,进行测试准备,封装测试的预期结果。 (2) 定义测试方法testIsTriangle()和testIsType() (3) 在测试方法中使用断言 (4) 定义suite()方法,使用缺省的TestSuite public static TestSuite suite(){ return new TestSuite(TestTriangle.class); } (5) 通过缺省的TestSuite调用TestRunner生成测试结果。 //调用SWING UI或TEXT UI执行测试 //junit.textui.TestRunner.run(TestTriangle.class); junit.swingui.testRunner.run(TestTriangle.class); 2.[作业]设计类NextDay,该类包含year, month, day三个属性,该类可以根据用户输入的year, month, day的值输出用户输入日期对应的下一天。设计NextDay的测试类TestNextDay对其中核心方法,综合使用等价类划分和健壮性测试方法设计测试用例执行单元测试。建议NextDay结构如图7所示。 图7:NextDay 问题3:给出NextDay的关键代码。 public class NextDay { public int year; public int month; public int day; public NextDay() {} public boolean isLeapYear() { if(year%4==0&&year%100!=0||year%400==0) { return true; } else { return false; } } public boolean isFebruary() { if(month==2) { return true; } else { return false; } } public boolean isYearEnd() { if(month==12&&day==31) { return true; } else { return false; } } public int getMonthMaxDays() { if(month==4||month==6||month==9||month==11 ) { return 30; } else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ return 31; } else { if(year%4==0&&year%100!=0||year%400==0) { return 29; } else { return 28; } } } public String computeNextDay() { String nextday = new String(); if(isMonthEnd()) { day = 1; month += 1; } else { day += 1; } return nextday; } }                                                                                                                                                    问题4:采用等价类划分方法和边界值分析方法为次日问题设计测试用例。给出测试用例设计的详细过程及结果。 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 把设计的测试用例整合到表格之中,并给出测试执行情况。 编号 测试对象 测试数据 测试过程 测试预期执行结果 测试执行情况(Pass/Fail) 1 computeNextDay 2016/12/31 assertEquals(expected, nextDay.computeNextDay()); 2017/1/1 Pass 2 computeNextDay 2016/2/29 assertEquals(expected, nextDay.computeNextDay()); 2016/3/1 Pass 3 getMonthMaxDays 2016/2/3 assertEquals(expected,nextDay.getMonthMaxDays()); 29 pass             问题5: 参考《JUnit In Action(第2版)》,谈谈你对JUnit测试框架的理解。 当你需要编写更多的testCase的时候,你可以创建更多的TestCase对象。当你需要一次执行多个TestCase对象的时候,您可以创建一个TestSuite对象或使用缺省的TestSuite对象进行封装。为了执行TestSuite,需要使用TestRunner。通过TestRunner的执行生成TestResult对象。 (1)testCase测试用例 用户定义的TestCase必须扩展junit.framework.TestCase类,它以testXXX方法的形式包含了一个或多个测试。一个测试用例把具有公共行为的测试归入一组。 (2)TestSuite测试套装 一个测试套装可以把多个测试用例或测试套装封装为一组 (3)TestRunner测试运行器 测试运行器用来运行测试套装,Junit提供良种典型的测试运行器: junit.swingui.TestRunner 和 junit.textui.TestRunner 实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 编制纸质实验报告,详细描述实验过程和实验 体会 针灸治疗溃疡性结肠炎昆山之路icu常用仪器的管理名人广告失败案例两会精神体会
本文档为【E4_JUnit单元测试(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_153723
暂无简介~
格式:doc
大小:45KB
软件:Word
页数:15
分类:互联网
上传时间:2019-01-12
浏览量:28