JUnit注解与hamcrest

黑盒测试: 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序【学Java,到凯哥学堂kaige123.com】外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。说白了黑盒测试就是不需要知道程序的代码结构,只需要类似于充当用户那样去使用。 所以黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。

白盒测试: 白盒测试[1]  又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。 采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。 白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。 白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化: 1.语句覆盖每条语句至少执行一次。 2.判定覆盖每个判定的每个分支至少执行一次。 3.条件覆盖每个判定的每个条件应取到各种可能的值。 4.判定/条件覆盖同时满足判定覆盖条件覆盖。 5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。 6.路径覆盖使程序中每一条可能的路径至少执行一次。

由上可知,白盒测试对于测试人员来说技术要求较高,一般只有比较严格的大项目才会使用白盒测试,白盒测试成本也大,所以一般大多数情况下是程序员自己进行简单的白盒测试。

JUnit注解: 我们都知道JUnit4是使用注解的方式来对方法进行测试的,而这些注解都是分开进行测试的,就像线程一样,每在一个方法上添加一个注解,就像是开启一个线程去测试这个方法,所以一个注解一个分支,多个注解多个分支:

@Before和@After注解: @Before的作用是在JUnit测试之前会调用写有@Before注解的方法。@After的作用则相反,是在JUnit测试结束后调用写有@After注解的方法。有一点要注意的是:这里所说的测试是指每一个写有@Test注解的方法,也就是每个分支都是一个JUnit测试,每个分支测试在开始前会调用写有@Before注解的方法,结束则调用@After注解的方法,例如我写了3个测试的话,就会调用写有@Before的方法3次,调用写有@After的方法3次。 代码示例:

运行结果:

在@Test注解里加上expected,是用来测试方法有没有抛出应该抛出的异常的,也就是专门测试异常发生的,如果没有抛出相应的异常,就表示这个方法是有问题的,JUnit的测试结果就会报出错误。 错误代码示例:

运行结果:

正确的代码示例:

运行结果:

在@Test注解里加上timeout,是用于测试方法运行的时间有没有超过所设定的时间,如果没超时则测试的结果是正确的,超时了自然测试结果就是错误的。 错误代码示例:

运行结果:

正确代码示例:

运行结果:

@RunWith和@SuiteClasses是用来统一运行多个测试类的,把写有测试注解的类加入到@SuiteClasses中,就可以将这些类统一的进行运行,这个过程只需要运行写有@RunWith和@SuiteClasses的类即可,测试类不需要运行。

代码示例:

运行结果:

Assert: Assert是JUnit里的一个工具类,这个类里面的方法能够给我们提供类似于判断语句一样的效果。 assertTrue/assertFalse方法:

assertArrayEquals方法:

这个方法是用来比较两个数组对象是否一致的,这个方法的参数类型有很多种,可以比较8种基本数据类型的数组和Object类型的数组,而且也能在方法参数里加一个字符串,这个字符串可以在测试结果报错时被打印出来,下面用boolean数组做一个示例:

运行结果:

assertEquals方法:

这个方法主要是用来比较两个变量是否相同的,同样的可以比较8种基本数据类型的变量和Object数组对象,而且也能在参数中加字符串,以下以int类型和Object数组做一个示例:

运行结果:

assertNotEquals方法:

这个方法是用来比较两个变量【学Java,到凯哥学堂kaige123.com】是否是不相同的,不相同则没问题,相同则会报错,可以比较long、double、float基本数据类型和Object类型对象,同样的可以在参数里加上一个字符串,下面以long类型和Object类型做一个示例:

运行结果:

assertNotNull方法:

这个方法是用来判断Object类型的对象是否为不为空的,不为空则没问题,为空则报错,同样的可以在参数里加上一个字符串。 代码示例:

运行结果:

assertSame 方法: 此方法用于比两个Object对象的内存地址是否一致,不一致则会报错:

fail方法: 这个方法是专门用来输出错误信息的,只要写了这个方法,不管测试用例本身是否正确,测试的结果都是错误的:

hamcrest: hamcrest包里的方法可以让Assert升级成类似于多路分支的判断语句就像if esle差不多,一般下载JUnit4以上的版本都会自带这个包。

核心 anything - 总是匹配,如果你不关心测试下的对象是什么是有用的 describedAs - 添加一个定制的失败表述装饰器 is - 改进可读性装饰器 - 见下 “Sugar” 逻辑 allOf - 如果所有匹配器都匹配才匹配, short circuits (很难懂的一个词,意译是短路,感觉不对,就没有翻译)(像 Java &&) anyOf - 如果任何匹配器匹配就匹配, short circuits (像 Java ||) not - 如果包装的匹配器不匹配器时匹配,反之亦然 对象 equalTo - 测试对象相等使用Object.equals方法 hasToString - 测试Object.toString方法 instanceOf, isCompatibleType - 测试类型 notNullValue, nullValue - 测试null sameInstance - 测试对象实例 Beans hasProperty - 测试JavaBeans属性 集合 array - 测试一个数组元素test an array’s elements against an array of matchers hasEntry, hasKey, hasValue - 测试一个Map包含一个实体,键或者值 hasItem, hasItems - 测试一个集合包含一个元素 hasItemInArray - 测试一个数组包含一个元素 数字 closeTo - 测试浮点值接近给定的值 greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 测试次序 文本 equalToIgnoringCase - 测试字符串相等忽略大小写 equalToIgnoringWhiteSpace - 测试字符串忽略空白 containsString, endsWith, startsWith - 测试字符串匹配

` Assert.assertThat("表达式判断不通过", true, is(true)); Assert.assertThat("表达式判断不通过", "asd", IsNull.notNullValue()); Assert.assertThat("表达式判断不通过", "Hello.java", allOf(endsWith(".java"), startsWith("Hello"))); Assert.assertThat("表达式判断不通过", "Hello.java", anyOf(endsWith(".java"), startsWith("Hello")));

代码示例:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,739评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 佴人杰聪造诣高, 逸世凌虚林风坳。 潇湘夜雨美飘淼, 前路漫漫展英豪。 途人观瞻行大道, 无忧相伴烦恼抛。 限莫广...
    庆小冬阅读 1,513评论 6 10
  • 一、首先是<meta>标签 这段代码的几个参数解释:width = device-width:宽度等于当前设备的宽...
    百度怎么用阅读 41,357评论 1 17