单元测试工具-JUnit

发表于:2019-1-30 10:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小白说我是狗    来源:博客园

#
JUnit
  单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。
  第一讲,什么是单元测试
  写了个类,要给别人用,会不会有bug?怎么办?测试一下。
  用main方法测试好不好?不好!
  不能一起运行!
  大多数情况下需要人为的观察输出确定是否正确
  80各类难道需要写80个main方法累死你。其中修改了20各类,难道我们还得在跑一边。
  第二讲,为什么要进行单元测试
  重用测试,应付将来的实现的变化。
  以后基于我现在这个类写出来的其他代码,会更加有正确性。
  提高士气,明确知道我的东西是没问题的。
  成本:开发,测试,部署,维护。那个阶段哈udeqianshi最多的-----------维护。!!!占60%=è降低后期的成本
  说了一句:保证方法是正确的。
  很多公司都不写junit测试。为啥嘞,因为中国公司有的太简单,增删改差。有的给政府做,无所谓。呵呵。
  最终提高软件的质量。
  引出junit。单元测试的一个工具,就是junit
  第三讲,JUnit4 HelloWorld(开始使用!)
  前言:Eclipse是直接对junit进行了集成的。我们可以直接用。!!哈哈
  下面是建一个junit的步骤。
  1.new project
  新建一个包,不是新建一个类哦。
  包名:com.bjsxt.junit4.test。我们需要专门见一个junit的的包。跟java源码的包并列即可。如图所示u。
  2.建立类(生成测试类)
  建类的名字。被测类名Test。这么构成。比如TTest。
  可以选择对那个类进行测试。可以选择对类的哪个方法进行测试。
  Eclipse自带了junit包的,默认就行。一会儿再说,如果不用自带的jar包应该怎么导入外部的包。

  构建完了。
  import static org.junit.Assert.*;
  发现有这么一句代码。
  这个静态类,里面有很多静态的方法,可以直接用。
  jdk5出现的新语法。静态引入。哈哈。
  3.建立testcase
  其实上一部已经建立了testcase的框框吧。我们继续完善。
  刚才的状态:
  按照之前的测试步骤,我们需要写完程序,用print打印出来,看结果对不对。但是junit的assert类给我们提供了方法。
  【引言】assert:翻译,断言。其实就是判断的意思。
  assert有很多方法。提供给我们。
  Assert.assertEquals(expected,actual);
  期望值是8,实际值是z。自己进行判断。
  keeps the bar green ,to keeps the code clean.
  程序自动判断有什么好处呢?:
  直接看滚动条是不是绿色就能判断代码是不是通过
  可以一下子测试很多方法啊。(在类上右键,test junit)用main是不行的。
  不用人工肉眼判断了,程序判断方便啊。
  第四讲。放弃旧的断言assert,使用hamcrest断言
  并不是真的放弃旧的assert。只是提出一种新的统一的assertThat。用那种都可以。后者必须用到hamcrest包。
  读junit网址。可以下载最新想junit来使用。
  读文档。看起来跟jdk帮助文档一样。
  试一下assert的其他方法:
  几乎所有的assert方法都有一个重载 的形式。也即是前面有一个字符串参数。作用是:当断言没有通过的时候,会提示这个字符串。
  assertThat
  在junit4之后,加入了assertThat方法。可以替代所有的assert方法。
  使用方法:
  assertThat(actual,matcher)
  matcher:规则匹配器。
  只用例子:
  这个方法需要hamcrest这个包。需要自己下载。
  将hamcrest的两个jar包加入我们的项目。引入。
  可能会报错:ClassLoader的错误。说明我们引入的包有冲突(他们用到classloader用到不是同一个)。之前讲过类似问题
  原因:Eclipse自带的junit.jar与hamcrest又冲突。
  解决:移除原来的junit.jar,自己import最新的junit.jar即可。
  2.使用hamcrest的匹配方法(唯一优点)
  a)         更自然
  3.示例
  a)         assertThat( n, allOf( greaterThan(1), lessThan(15) ) );满足左右条件 assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );满足其中一个条件
  assertThat( n, anything() );
  assertThat( str, is( "bjsxt" ) );
  assertThat( str, not( "bjxxt" ) );
  b)        assertThat( str, containsString( "bjsxt" ) );
  assertThat( str, endsWith("bjsxt" ) );
  assertThat( str, startsWith( "bjsxt" ) );
  assertThat( n, equalTo( nExpected ) );
  assertThat( str, equalToIgnoringCase( "bjsxt" ) ); assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );
  c)         assertThat( d, closeTo( 3.0, 0.3 ) );
  assertThat( d, greaterThan(3.0) );
  assertThat( d, lessThan (10.0) );
  assertThat( d, greaterThanOrEqualTo (5.0) );
  assertThat( d, lessThanOrEqualTo (16.0) );
  d)        assertThat( map, hasEntry( "bjsxt", "bjsxt" ) );
  assertThat( iterable, hasItem ( "bjsxt" ) );
  assertThat( map, hasKey ( "bjsxt" ) );
  assertThat( map, hasValue ( "bjsxt" ) );
  第五讲,Failure和Error
  Failure是指测试失败
  2.Error是指测试程序本身出错(一个测试单元,出现error就不会再报failure了!有优先级的。)
  第六讲,JUnit4 Annotation(注解!)
  @Test: 测试方法
  在junit4中,新建Junit Test类是之前讲过的方法。但是在已有的类中添加新的测试方法,只需要写一个符合语法的方法,再在前面加上注解:@Test
  a) (expected=XXException.class)期望抛出某种异常,抛出的话不影响测试是否通过。
  b) (timeout=xxx)如图:期望在一定时间内结束本方法的测试,否则失败。
  2.@Ignore: 被忽略的测试方法
  该测试方法在本次测试中暂时不执行。
  3.@Before: 每一个测试方法之前运行
  4.@After: 每一个测试方法之后运行
  上面两个annotation用在情况:测试方法需要打开文件,我们就在before中打开文件。在after中关闭文件。
  5.@BeforeClass: 所有测试开始之前运行
  6.@AfterClass: 所有测试结束之后运行
  这个是所有测试方法开始之前使用的。
  beforeClass取得比较耗时的资源。搭载比较耗时间的环境的时候。
  jiazai 配置文件,什么连接数据库的连接池各种。总不能每个测试方法都执行一遍这些操作吧,费时也没必要。
  afterClass资源释放掉,环境卸载
  第七讲,运行多个测试
  新建一个java类。
  新建一个Junit类。
  run-configruation-Test—Run
  all tests
  甚至有人提出来,先把测试junit类写出啦。TDD:Test Drive Development 测试驱动开发。一个新的开发思想。
  注意
  其实最开始创建Junit Test类的时候就已经按照这个约定在创建了。
  结构上是:建一个包,与java源码的包并列。
  命名:类名需要XXXTest;方法名XXXtestMethod
  遵守约定,比如:
  a) 关于包:类放在test包中
  b) 关于测试类:类名用XXXTest结尾
  c) 关于测试方法:方法用testMethod命名
  其他框架
  除了junit测试框架之外,还有别的测试框架:比如TestNG
  ant的使用场合:
  积累业务经验是关键啦。而不是编码经验喽。

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号