轨范三:单元测试
. i: T# |' u* R1 i: a' h9 H0 G' [单元测试用例设计和评审
, B5 h6 G5 Y$ J/ f0 s8 h# c' D单元测试是软件开发过程中主要的质量保证环节,在此环节中,设计和评审对于保证整个单元测试过程的完整性和有用性来说十分主要。设计阶段需要具 体考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例设计》文档,用来指导具体的单元测试 执行。在用例设计中,经由过程对代码单元输入和等候输出的界说来保证该单元的功能正确性,鸿沟值的测试和异常测试很是主要。同时也配合测试用例和功能块的匹配 体例来权衡用例设计的完整性。
6 h% @- z$ Q m- o" j) q4 u7 N在用例设计完成之后,下一步的工作就是进行测试用例的评审。小我的理解和经验始终是有限的,用例评审可以借集体之力,对用例设计进入查漏补缺, 进一步保证测试用例的有用性。因为单元测尝康复白盒测试规模,它首要经由过程对代码的逻辑结构进行剖析来设计测试用例,是以,评审员的选择最好以理解代码逻辑 结构为前提,如不美观评审员来自相关模块,还能够有用的发现模块相关性和依靠性所带来的问题。
" h1 ~8 O, @! J) V2 F! k5 h模拟对象手艺
- E; \$ U: C! |' H' `在现实项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被挪用的真实对象经常很难被实例化,或 者这些对象在某些情形下无法被用来测试,例如,真实对象的行为无法展望,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时辰,就需要使用模拟对 象手艺(Mock),操作一个模拟对象来模拟我们的代码所依靠的真实对象,来辅佐完成测试,提高测试笼盖率,年夜而提高代码质量。模拟对象手艺操作了在面向 接口的编程中,因为代码直接对接口进行挪用,所以代码并不知道引用的是真实对象仍是模拟对象,这样就可以顺遂的完核对代码的测试,模拟手艺有良多种,如 jMock,EasyMock,Mockito,PowerMock等等。其中Mockito消弭了对期望行为的需求,避免了这些代码的年夜量初始化。. S. v8 b t+ L: } {, a
- w$ v$ `$ i3 {% p2 @/ U( @3 W图8.Mockito示例 9 S% c9 I4 ^; [+ Q1 T' A
在模拟对象过程中,先模穆矣闽需要挪用的List对象LinkedList,再设定章个对象的行为,当挪用get(0)的时辰,返 回”first”。这样,测试代码就可以操作这个对象来测试我们的功能代码,需要挪用和返回值的时辰,可以顺遂的获得模拟对象的返回值。也需要对模拟对象 进行错误情形的模拟,保证代码对错误的措置的正确性。
9 P- x9 ^: \2 E7 p, |& L& x测试笼盖率剖析
. E/ D( o( Q3 ?4 e6 |6 p0 ~4 t% c为了权衡单元测试的质量和笼盖典型围,需要对单元测试的代码进行测试笼盖剖析。常用的权衡测试笼盖率的指标首要有语句笼盖率、分支笼盖率、路径 笼盖率、前提笼盖率和体例笼盖率等。具体采用哪些指标可以按照项目的现实情形来定,以避免因过高的指标增添了代码开发人员的工作量而影响了项目整体的进 度。
\0 E7 o0 @7 d" l; BEMMA是一款斗劲风行的开源Java测试笼盖率剖析工具,撑持类、体例、代码行、根基代码块等多种类型的测试笼盖率剖析,撑持将笼盖率剖析结 不美观导出为多种名目的陈述,并采用多种颜色来高亮显示分歧的笼盖率状况。EclEmma是一款基于EMMA的Eclipse插件,便利在 EclipseIDE中进行测试笼盖率剖析。如图9,在测试用例写好后,可以在右键点击测试类,选择CoverageAs->JUnitTest。
) O1 E% j6 j$ ~: W0 `% L, Z
, [3 o3 t/ K7 a# g% a& X图9.运行测试笼盖剖析 ) k C& S7 z! O; L! P1 k! V
单元测试跑完后,Coverage视图中会显示所选择的测试的笼盖率。双击打开某一具体的类后,可以看到高亮显示的笼盖剖析结不美观,如图10所 示。红色代表测试没有笼盖到该行,黄色暗示部门笼盖,绿色的行暗示该行在本次测试中被笼盖到。
# a \2 |6 ^$ W* @' g8 M8 a; @5 G, @. Z( H
图10.查看测试笼盖剖析结不美观 6 q \, Y* ^7 ^( o1 L
在Coverage视图中可以经由过程点击鼠标右键将测试笼盖剖析的结不美观导出成需要的名目,例如HTML。 ^: v# P1 r% p% Q$ n
, C' U g( E! J' k6 e图11.导出测试笼盖剖析结不美观 3 X: V# @! e) R" H
图12显示了导出的report。! B. l; Y) v, J6 G' e7 b& `
7 W( n4 R5 M/ S. X- }- F4 g \图12.测试笼盖剖析陈述 4 S* q* e* [% [/ v7 P2 K6 u/ t% D4 G% u
6 m7 |& L* [3 f为了保证单元测试的有用性和质量,可以划定一个测试笼盖率的下限,例如所有的包和类的笼盖率必需达到80%以上。不外值得注重的是,不要纯挚追 求高笼盖率,要同时注重测试用例的质量,如不美观测试用例自己就写的有错误,那么即使测试笼盖率很高也没有意义。 |