• 1. Junit单元测试www.cvicse.com讲解人:孙益飞
  • 2. Junit单元测试1.单元测试的概念及意义2.单元测试的工具3. Junit简介4.如何安装Junit5.如何使用Junit
  • 3. 什么是单元测试 单元测试测试的是软件最小的可执行单元的正确性,即类或方法。 单元测试通常是一段可执行代码,并能验证执行结果是否和预期相等 每个单元测试至少应该有两个测试例子( Test Case ):Negative/Positive 单元测试可以是黑盒也可以是白盒,取决于执行方法 盖房子,至少要保证每一块砖都是好的
  • 4. 定义: 是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确 意义: 单元测试是其他类型测试的基础。不认真,完整的单元测试会导致其他类型测试起不到好的效果。 经过了单元测试的代码才是已完成的代码。 提交产品代码时也要同时提交测试代码。测试部门可以作一定程度的审核。 对于程序员来说,如果养成了对自己写的代码进行单元测试的习惯,不但可以写出高质量的代码,而且还能提高编程水平单元测试
  • 5. 单元级测试在面向对象的开发中变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元级测试框架对成功的实施测试有着至关重要的作用。在java编程环境中,Junit Framework是一个已经被多数java程序员采用和实证的优秀的测试框架。开发人员只需要按照Junit的约定编写测试代码,就可以对自己要测试的代码进行测试。 初识Junit单元测试框架
  • 6. Junit单元测试JUnit是一个开源的java测试框架,它是Xuint测试体系架构的一种实现。在JUnit单元测试框架的设计时,设定了三个总体目标: 1.简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写; 2. 使测试单元保持持久性; 3. 可以利用既有的测试来编写相关的测试。
  • 7. 单元测试工具目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为 JUnit(java) CppUnit(C ) DUnit (Delphi ) NUnit(.net) PhpUnit(Php )等等。
  • 8. 示例:在Eclipse中使用Junit4进行单元测试
  • 9. 如何安装Junit
  • 10. 第一步:将JUnit4单元测试包引入项目在该项目上点右键,点“属性”,选择“Java Build Path”,选择“Libraries”标签, 点击“Add Library…”按钮
  • 11. 第二步,生成JUnit测试框架在Eclipse的Package Explorer中右点Calculate.java, 选择new -> “JUnit Test Case”
  • 12. 第二步,生成JUnit测试框架在Eclipse的Package Explorer中右点Calculate.java, 选择new -> “JUnit Test Case”
  • 13. JUnit测试框架效果图MyEclipse自动生成测试框架
  • 14. (一)Import 测试包org.junit.* ;把junit包import进来之后,绝大部分功能就有了。 import static org.junit.Assert.*; 我们在测试的时候使用的一系列assertEquals等方法就来自这个包。 注:assertEquals是Assert类中的一系列的静态方法,一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。
  • 15. (二)测试类的声明测试类是一个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。但是建议都用类名+Test 来命名。 我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明
  • 16. (三)创建一个待测试的对象你要测试哪个类,那么你首先就要创建一个该类的对象。 为了测试Calculator类,我们必须创建一个calculator对象。
  • 17. (四)测试方法的声明在测试类中,并不是每一个方法都是用于测试的,你必须使用“标注”来明确表明哪些是测试方法。 @Before、@Test、@Ignore 、 @After
  • 18. (五)编写一个简单的测试方法使用@Test标注,以表明这是一个测试方法。 方法名字可以随便取,没有任何限制,但是规范写法是test+方法名,方法名第一个子母大写。 方法的返回值必须为void, 方法不能有任何参数。 如果违反这些规定,运行时会抛出一个异常
  • 19. 我们期待的结果应该是5。 assertEquals(5, calculator.getResult());就是来判断期待结果和实际结果是否相等 第一个参数填写期待结果,第二个参数填写实际结果 。 JUnit会自动进行测试并把测试结果反馈给用户
  • 20. (六)忽略测试某些尚未完成的方法加上@Ignore标注的含义就是“某些方法尚未完成,暂不参与此次测试”。 这样的话测试结果就会提示你有几个测试被忽略,而不是失败
  • 21. (七)Fixture “固定代码段”@Before,@After是每个方法测试时候必然被调用的代码 保证每一个测试都是独立的,相互之间没有任何耦合度 这里不需要@Test标注,因为这不是一个test 测试开始->setUp->testXXXX->tearDown->测试结束
  • 22. @BeforeClass 或 @AfterClass只在测试用例初始化时执行@BeforeClass方法,当所有测试执行完毕之后,执行@AfterClass进行收尾工作 用于测试读取文件等耗时的方法。 该方法必须是public和static的
  • 23. (八)限时测试对于那些逻辑很复杂,循环嵌套比较深的程序采用限时测试 函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时
  • 24. (九)测试异常expected属性用来测试函数应该抛出的异常
  • 25. (十)Runner (运行器)JUnit中有一个默认Runner,如果你没有指定,那么系统自动使用默认Runner来运行你的代码 @RunWith是用来修饰类 ,可以指定需要的Runner
  • 26. (十一)参数化测试可以将所有参数集中起来一起测试,步骤如下: 1:你要为这种测试专门生成一个新的类 2:定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果 3:定义测试数据的集合 ,用@Parameters标注进行修饰 4:创建构造函数对先前定义的两个参数进行初始化
  • 27. (十一)参数化测试
  • 28. (十二)打包测试步骤: 1:用@RunWith标注传递一个参数Suite.class。 2:用@Suite.SuiteClasses表明这个类是一个打包测试类。 3:把需要打包的类作为参数传递给该标注
  • 29. 第三步:Eclipse中如何运行测试类右击测试类->Run As->JUnit Test
  • 30. 第四步:测试结果(1):运行CalculatorTest
  • 31. 第四步:测试结果(2):运行SquareTest
  • 32. 第四步:测试结果(3):运行AllCalculatorTests两个测试类
  • 33. JUnit 框架
  • 34. JUnit几个核心类及接口Assert当条件成立时候assert方法保持沉默,但若条件不成立就抛出异常TestResult包含了测试中发生的所有错误或失败TestListener测试中若产生(开始,结束,错误,失败)会通知TestListenerTestCase定义了可以用于运行多项测试的环境(实现了Test接口)TestSuite运行一组test case(他们可能包含其他 test suite),它是Test的组合(实现了TestSuite)BaseTestRunner用来启动测试的用户界面,BaseTestRunner是所有test runner的超类
  • 35. Assert 超类所提供的8个核心方法assertEquals()用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;assertFalse() assertTrue()用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反;assertSame() assertNotSame()用来比较两个对象的引用是否相等和不相等,类似于通过“==”和“!=”比较两个对象;assertNull() assertNotNull()用来查看对象是否为空和不为空;fail ()让测试失败,并给出制定信息。
  • 36. TestCase提供了10个自己的方法countTestcases计算run(TestResult result)所执行的TestCase的数目(由Test接口规定)createResult创建默认的TestResult对象getName获得TestCase的名字run运行TestCase并收集TestResult中的结果runBare运行测试序列,但不执行任何特殊功能,比如自动发现test方法runTest重载以运行测试并断言其状态setName设置TestCase的名字setUp初始化fixturetearDown销毁fixturetoString()返回Test的字符信息
  • 37. JUnit4.X 版本与以前版本的区别1.测试类不必再从junit.framework.TestCase派生了; 2.测试方法也不必再以“test”作为前缀,而是代之以@Test注解来表示; 3.作为Fixtures的setUp与tearDown也不再强制使用这两个方法名了,只要在任何方法名称前冠以@Before或@After,即可达到一样的效果; 4.对setUp/tearDown的一大改进还包括,可以限定二者只在整个test case范围内执行一次,这是通过@BeforeClass和@AfterClass注解达成的; 5.@Test 注解还可以带上timeout 参数和expected参数,前者代表测试方法超过指定时间即被认为失败,后者则声明了预期被抛出的异常类型。
  • 38. www.themegallery.comwww.themegallery.comThank You !