收藏 分销(赏)

Junit详细学习资料PPT课件.ppt

上传人:胜**** 文档编号:748323 上传时间:2024-03-01 格式:PPT 页数:48 大小:1.63MB
下载 相关 举报
Junit详细学习资料PPT课件.ppt_第1页
第1页 / 共48页
Junit详细学习资料PPT课件.ppt_第2页
第2页 / 共48页
Junit详细学习资料PPT课件.ppt_第3页
第3页 / 共48页
Junit详细学习资料PPT课件.ppt_第4页
第4页 / 共48页
Junit详细学习资料PPT课件.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、JUnit南京大学软件学院20091 1课程内容单元测试简介JUnit简介JUnit核心类/接口JUnit单元测试的步骤JUnit实例JUnit在Eclipse下的使用JUnit最佳实践2什么是软件测试为了发现错误而执行程序的过程IEEE提出的软件工程标准术语中,软件测试被定义为:“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。”3测试类型单元测试集成测试功能测试压力/负荷测试验收测试4单元测试单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确通常而言,一个单元测试是用于判断某个特定条件(

2、或者场景)下某个特定函数的行为5单元测试的方法人工静态分析:通过人工阅读代码的方式来查找代码中存在的错误自动静态分析:使用代码复查工具,主要用来发现语法特征错误自动动态测试:用工具自动生成测试用例并执行被测程序,主要用来发现行为特征错误人工动态测试:人工设定程序的输入和预期输出,执行程序,判断实际输出是否符合预期,若不符则自动报告错误。利用JUnit完成的便是人工动态测试6单元测试的必要性带来比功能测试更广范围的测试覆盖让团队协作成为可能能够防止衰退,降低对调试的需要 能为我们带来重构的勇气能改进实现设计当作开发者文档使用7JUnit简介JUnit 是 Java 社区中知名度最高的单元测试工具

3、。由 Erich Gamma 和 Kent Beck 共同开发完成 开源软件支持语言Smalltalk,Java,C+,Perl 等等支持的IDEJBuilder,VisualAge,Eclipse等8JUnit功能可供选择的其他前端或者test-runner,用来显示你的测试结果 用单独的classloader来运行每个单元测试,以避免副作用标准的资源初始化和回收方式(setUp和tearDown)各种不同的assert方法,让你检查测试结果的操作变得更容易同流行的工具,比如Ant,以及流行IDE比如Eclipse,JBuilder整合9JUnit的好处开源工具,可以免费使用,可以找到很多实

4、际项目中的应用示例。由于源码开放,开发者还可以根据需要扩展JUnit功能可以将测试代码和产品代码分开测试代码编写容易,功能强大自动检验结果并且提供立即的反馈易于集成到开发的构建过程中,在软件的构建过程中完成对程序的单元测试测试包结构便于组织和集成运行,支持图形交互模式和文本交互模式10JUnit 安装Java的JUnit可从网上免费下载http:/junit.org将下载的junit.zip解压到你指定的目录设置环境变量Variable:CLASSPATHVariable Value:.;Install Path/junit.jar测试运行(进入命令提示符安装目录下)java junit.sw

5、ingui(textui,awtui).TestRunner junit.samples.AllTests11JUnit 框架12JUnit核心类及接口(1)13JUnit核心类及接口(2)TestRunner(测试运行器)没有TestRunner接口,只有一个所有TestRunner都继承的BaseTestRunner执行测试并提供相关的结果的统计信息包含三个TestRunner类一个用于文本控制台一个用于Swing还有一个AWT(遗产代码,很少有人用)14JUnit核心类及接口(3)TestRunner(测试运行器)实际运用中的Swing test runnerGreen bar 通过测试

6、 Red bar 测试失败15JUnit核心类及接口(4)TestCase(测试用例)把具有公共行为的测试归入一组扩展了JUnit的TestCase类的类。它以testXXX方法的形式包含一个或多个测试典型的TestCase包含两个主要部件fixture单元测试16JUnit核心类及接口(5)TestCase(测试用例)Fixture管理资源,复用配置代码运行一个或多个测试所需的公用资源或者数据集合TestCase通过setUp和tearDown方法来创建和销毁fixture 典型应用数据库连接,生成输入文件17JUnit核心类及接口(6)TestCase(测试用例)创建单元测试方法继承自Te

7、stCase的一组assert方法封装了最常见的测试任务,这些assert方法可以极大地简化单元测试的编写18Assert超类所提供的8个核心方法19JUnit核心类及接口(7)TestCase(测试用例)创建单元测试方法除了Assert提供的方法之外,TestCase还实现了10个它自己的方法 coutTestCases,CreateResult,getName,run,runBare,setName,setup,teardown,toString20TestCase的10个自己的方法21JUnit核心类及接口(8)TestCase(测试用例)这18个方法共同为你提供了使用JUnit编写测试

8、的全部功能22JUnit核心类及接口(9)TestSuite(测试集合)test suite是把多个相关测试归入一组便捷方式若你没有提供自己的TestSuite,test runner会自动创建一个 缺省的TestSuite 不能满足时,可能会想组合多个suite,把它们作为主suite的一部分,这些suite来自几个不同的package23JUnit核心类及接口(10)TestSuite(测试集合)通常情况下TestAll类仅仅包括一个静态的suite方法,这个方法会注册应用程序需要定期执行的所有Test对象(包括TestCase对象和TestSuite对象),下面是一个典型的TestAll

9、类24TestAll类import junit.framework.Test;import junit.framework.TestSuite;import junitbook.sampling.TestDefaultController;public class TestAll extend TestCase public static Test suite()TestSuite suite=new TestSuite(All tests from part 1);suite.addTestSuite(TestCalculator3.class);suite.addTestSuite(Tes

10、tDefaultController.class);return suite;25JUnit核心类及接口(11)TestResult所有的TestSuite都有一个对应的TestResult负责收集TestCase的执行结果。储存了所有测试的详细情况,是通过还是失败。失败则会创建一个TestFailure对象TestRunner使用TestResult来报告测试结果。没有TestFailure对象进度条就用绿色,否则进度条用红色并输出失败测试的数目26JUnit核心类及接口(12)TestResultJUnit区分失败和错误失败:是可以预期的,代码的改变不时会造成断言失败,你只要修正代码,断言

11、就可以再次通过错误:比如常规程序抛出的异常,则是测试时不可预料的27JUnit核心类及接口(13)TestListener帮助对象访问TestResult并创建有用的报告。虽然Testlistener接口是JUnit框架的重要部分,但是你编写自己的测试时不必实现这个接口。只有需要扩展JUnit框架时才会需要实现这个接口28JUnit单元测试的步骤(1)JUnit成员三重唱,共同产生测试结果当你需要编写更多的TestCase的时候,你可以创建更多的TestCase对象。当你需要一次执行多个TestCase对象的时候,您可以创建一个TestSuite对象或使用缺省的TestSuite对象进行封装。

12、为了执行TestSuite,需要使用TestRunner。通过TestRunner的执行生成TestResult对象29JUnit单元测试的步骤(2)1.重载setUp(),封装测试环境初始化及测试数据准备2.设计测试方法,以testXXX命名3.在测试方法中使用断言方法如assertEquals(),assertTrue()等4.设计测试套件,或使用缺省的测试套件,调用TestRunner执行测试脚本,生成测试结果5.重载tearDown()析构测试环境,执行收尾动作30待测类public class Calculator public int add(int a,int b)return

13、a+b;public int minus(int a,int b)return a-b;public int multiply(int a,int b)return a*b;public int divide(int a,int b)throws Exception if(0=b)throw new Exception(除数不能为零!);return a/b;31该类的测试类1/4public class CalculatorTest extends TestCase private Calculator cal;public void setUp()cal=new Calculator();

14、public void tearDown()测试类必须以TestCase为父类 每个测试方法执行前都会调用该方法析构测试环境,执行收尾动作生成对象32该类的测试类2/4public void testAdd()int result=cal.add(1,2);Assert.assertEquals (3,result);public void testMinus()int result=cal.minus(1,2);Assert.assertEquals(-1,result);public void testMultiply()int result=cal.multiply(2,3);Asser

15、t.assertEquals(6,result);Junit3.8测试方法需满足:1)Public的2)Void的3)无方法参数4)方法名称必须以test开头断言调用该方法33该类的测试类3/4public void testDivide()int result=0;tryresult=cal.divide(6,4);catch(Exception e)e.printStackTrace();Assert.fail();Assert.assertEquals(1,result);期望该行代码永远不会被执行,断言失败,停止执行立即失败34该类的测试类4/4public void testDivi

16、de2()Throwable tx=null;trycal.divide(4,0);Assert.fail();catch(Exception ex)tx=ex;Assert.assertNotNull(tx);Assert.assertEquals(Exception.class,tx.getClass();Assert.assertEquals(除数不能为零!,tx.getMessage();一个方法可以有多个测试方法,输入的不同情况会有不同的testcase出现tx是Exception类型的一旦发生异常,则tx一定不为空期望该行代码永远不会被执行,断言失败,停止执行立即失败35同时测试多

17、个类(1)现有两个测试类CalculatorTest.javaLargestTest.java如何一下全部运行?如何自动化测试?36同时测试多个类(2)public class TestAll extends TestCasepublic static Test suite()TestSuite suite=new TestSuite();suite.addTestSuite(CalculatorTest.class);suite.addTestSuite(LargestTest.class);return suite;必须是static返回一个Test类型方法名必须是suite生成一个Tes

18、tSuite测试类对应的class对象,还可增加TestSuite的对象返回suite,TestSuite 实现了Test接口37在Eclipse下使用JUnit(1)首先新建一个项目单元测试代码把它和被测试代码混在一起,这显然会照成混乱建议您分别为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便遵照这条原则,我们在项目 HelloJUnit 根目录下添加一个新目录 testsrc,并把它加入到项目源代码目录中38在Eclipse下使用JUnit(2)给新建一个HelloJunit类添加一个abs()方法packa

19、ge example;public class HelloJunit public static int abs(int n)return n=0?n:(-n);39在Eclipse下使用JUnit(3)在类上右击,选择“new”-“JUnit Test Case”新建一个HelloJUnitTest类,用来测试Hello类选择刚刚建立的文件夹“Hello/testscr”,选中setUp()和tearDown(),然后点击“Next”选择要测试的方法,我们选中abs(int)方法 点击“finish”,跳出需要添加JUnit.jar包,点击“OK”40在Eclipse下使用JUnit(4)H

20、elloJunitTest.java文件中输入代码41在Eclipse下使用JUnit(5)在测试类上点击右键,在弹出菜单中选择“Run As”-“JUnit Test”42表示测试通过表示测试失败JUnit视图工具栏移动到下一个故障点移动到上一个故障点仅显示故障和错误的测试方法锁定滚动重新运行上次测试重新运行上次测试首先解决故障打开JUnit运行历史记录停止运行JUnit43JUnit最佳实践(1)一次只测试一个对象单元测试独立地检查你创建的每个对象,这样就可以在第一时间把它们隔离起来。如果一次测试多于一个对象,那么你就无法预测当这些对象发生改变时它们会如何交互44JUnit最佳实践(2)在

21、assert调用中解释失败原因用到assert方法时,使用第一个参数是String类型的那个签名,这个参数让你可以提供一个有意义的文本描述,在断言失败时JUnit test runner会显示这个描述45JUnit最佳实践(3)选择有意义的测试方法名遵守testXxx的命名模式,其中Xxx是待测方法名。若你需要为同一个方法增加其他的测试,那么可以改用testXxxYyy的命名模式,其中Yyy描述了测试的不同之处46JUnit最佳实践(4)一个单元测试等于一个测试方法不要试图把多个测试塞进一个方法,这样导致的结果就是测试方法变得更复杂,而且在测试方法中编写的逻辑越多,测试失败的可能性也就越大,需要调试的可能性也就越大47JUnit最佳实践(5)同一个包,分离的目录把所有测试和待测类都放在同一个包中,但使用平行目录结构48

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 软件工程

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服