走进单元测试:单元测试背后的思考和感悟-1

上一篇 / 下一篇  2012-07-12 10:35:52 / 个人分类:单元测试

51Testing软件测试网m.xvXNN

  就要完成所有的单元测试的任务了,做了将近三个月的时间,如果放在以前我有一肚子苦水要述说,不过经历了一些思想上的洗礼之后,不在那么单纯,只为把手头工作做的更加出色而已!

H2x,U9uX0

@6{C5e.lzD2v0  这是单元测试最后一篇了,来做个总结把!51Testing软件测试网0rxF9]:O1Hv9s

51Testing软件测试网r+\Xv |7xP

  目录:51Testing软件测试网1h5ML$mz-L4D)b:c

&q*O.WO1y"j8i5F PmS0  好的单元测试应该具有的特点
?].U5{ D R? ],F0  单元测试的命名规范51Testing软件测试网PuL;Z'ei D6v;HF
  建立自己的公共调用库
@5`"ak0F0  单元测试带给我的思考和感悟51Testing软件测试网|mj,p-|Ox[
  总结图示

0Mx0Yo"}0

k_u,h s7aF0  1、好的单元测试应该具备的特点51Testing软件测试网v1HYUr a

51Testing软件测试网h2j#X IY!R8m

  一个好的单元测试一定有它具备的特点,下面就来说说那些主要的特点!51Testing软件测试网DJih(V%I.l/A$q

51Testing软件测试网+ozE,o8X

  主要概括为 → A-TRIP原则:51Testing软件测试网&V-y/Zx"[ h-J

51Testing软件测试网.n)eAG"w

  自动化  → Automatic51Testing软件测试网$Y-h7\*c)J,qs

w#i!S:eo:`0  彻底性  → Thorough51Testing软件测试网-yW O0F7o*n(i

p.X(e OW3a S|+? c*}0  可重复性   → Repeatable51Testing软件测试网va7^[v-AgN

n$i(u1\0P0  独立性  → Indepentdent51Testing软件测试网q7O GVtz8e

v1^y6tov"{9wr2u1Y0  专业性  → Professional51Testing软件测试网 x/_ `(?b@J6C0[T

r8B O5] VS;SXw IJ0  恰到好处的单元测试会使你的工作轻松,代码整洁干净,乱用,没有准则的用会浪费你大量的时间,不但没有效果还会是工期延误,所有了解单元测试很重要!

gU r0B7]3C051Testing软件测试网ky:q6Sj].]

  ① 自动化51Testing软件测试网I-b3W r3F7~ vJy'^

51Testing软件测试网(F@&md8q\z

    a)不需要人的参与,有的时候只是轻轻的点击一个按钮就能自动执行,所以自动化的标志是不能比点击一个按钮的过程还要复杂!51Testing软件测试网F6| [a-ju C(i,y

#@:r4d Rm*Dfth}0    b)在签入其它的测试代码时不能对现有的代码造成影响!

)J h.`5TK)XY0

#{#{@"I f&u'rTf0    c)能够自动识别测试是失败还是成功(VS2008以后的版本都集成了这个功能)!

ku V YY q4Q051Testing软件测试网-i%G DNC%ZM z({

    d)在任何时候,任何地方都能自动运行(所以“Moles”技术就是关键)!51Testing软件测试网'M,x6k'A A!c

]3ud~K9^0  核心:执行测试代码和检查测试结果都必须自动化(VS2008以后版本都实现这个功能了)!51Testing软件测试网2C ~"x M hBbqQ

-Bj1_;WnMi q0  总结:I,不要引入一个由于需要手动步骤而打破单元测试的自动化模型的测试!51Testing软件测试网_a~8@:D.{F

5CH]]Cs @&Z/C%r0     II,对于测试所需要的任何条件(大部分是数据库)都应该让它成为自动化测试的一部分,如果有需要可以使用Mole技术!

'CY{8f(e8dq0

7JFX(?!k(ge3H0  ② 彻底性

D6k8K B,o051Testing软件测试网(x7FM4o/H!J P

    所谓的彻底性就是说你的测试案例必须要考虑的全面,应该把可能出现的问题都做成测试案例!

9tG7z.g.}U051Testing软件测试网'_h8F[Bw

    具体从哪些方面着手,可以参阅这篇:走进单元测试:测试需要从哪些方面着手51Testing软件测试网5w v&] Z ZJ5N_

51Testing软件测试网)Wib5`x0X+ey

  ③ 可重复性51Testing软件测试网 F\Z| S

51Testing软件测试网QlT:q3C:}[8H

    a)每个测试案例应该独立于所有的其它测试,而且必须独立于周围的(系统)环境!

lRy;Zr0

2x~+G7tu0    b)测试代码能够一次又一次的运行,在不修改代码的前提下都能产生一样的结果,否则有BUG!51Testing软件测试网"^)SN9c+oG:s8A3[q

F3B!|-MpE0    c)不要把测试代码写死,应该写的更加灵活一点,运用封装,重构等等的思想!51Testing软件测试网Wn:eZm7lS:}\LN

Qnx2x b0    d)不要让测试本身也出现BUG,确保测试代码的正确性!51Testing软件测试网(~] P(LsG2|

51Testing软件测试网$|'Bv)b$pA[}N

  ④ 独立的

x m/QW6{B-o051Testing软件测试网OO9S0w+D1J"O^

    a)每个测试应该有很强的针对性,也就说一个测试只能测试一个方面的内容!

2Ce.AoHY6YJ/}5d3E*z0

Ge5Y P!A@s1p v Y0    b)每个测试应该独立于环境(软件所处的系统环境)和其它测试!

%v&pFR DiI051Testing软件测试网$\)anx*eR

  总结:I,每个测试都不能够依赖于其它测试,你可以在任何时间运行这个测试而不受其它测试的影响,每一个测试都应该是一座孤岛!

r8hp#^Vb$e051Testing软件测试网8QJ{-M(?R4k5R2b/sR

      II,所以测试一个函数都有很多个测试方法,只有这样才是真正的测试!

-NovNOEQ,YL0

j$MF _F K!Y0  ⑤ 专业的

&kc7I)U]n~g1C0

r{/cUF0    a)所谓的专业就是你的测试代码应该跟你的开发代码保持一样的风格,如:简洁明了,封装,解耦,不要出现“Hard Core”,要灵活一点!

$Z{TL'a9ji+wL051Testing软件测试网 w;[)d/kY;\(h!V

    b)拒绝编写冗余的测试代码,千万要小心不要掉进这个陷阱,因为像我们这样的新手在初期都不会注意到这样的问题,所以我们要牢记在心里!

Z,V&Cpis t0

3z4V|S]0    c)遵循普遍规则:1.维护封装 2.降低耦合!

%E`d#JdK+q5Q0

v7ByX-N8@+kf7Ru.l0  总结:不管怎么样你都应该认认真真的对待单元测试,代码的质量要求都应该跟开发代码同等水平,这是作为开发者必备的素质!

p/v]%|` DH051Testing软件测试网-M2b s sm.}^

  2、单元测试的命名规范

'I F%Z5m*D'~ p0

u1L ^WT"x0  在我们项目的中,可能需要测试的方法有成千上百个,而每一个测试方法都有可能写三个以上的测试案例,那么怎么来维护这么测试案例呢?51Testing软件测试网TS&uPl

;MV(C%x9e-g^2a0  所以我们应该规范方法的命名方式,那么其他人在阅读你的测试代码时,直接通过方法名就能知道你的测试案例是测试哪个方面的了!51Testing软件测试网QWc\$T \8P`

+mJ2i@/\ t&r0  Note:单元测试案例类似于一个可执行文档,可以帮助其它的开发人员了解方法的作用!

%y)VN!O SF}051Testing软件测试网UDu3]'X

  在我们的项目中是这样规定的:方法名 + _ + 你测试是哪个方面的内容 + _ + 产生的结果!51Testing软件测试网$W4Il-LU])R

51Testing软件测试网:WO ^)Pa%j\t

  下面我就举个列子,下面的测试方法命名就是针对这个函数来命名的,如:

-h |-HtFC"}IO xu0

i5`xH!sk!b051Testing软件测试网 C+]5`g/JYn

1    publicDataSet GetDetails(intID)
V,|%qX+|)w02{51Testing软件测试网 d;Q7_j u9bJ
3   // 方法的作用:这个一个获取数据,并包装成一个DataSet的方法,传入的参数是一个bondAppID,那么我们怎么来设计案例和命名方法名呢?
5}
51Testing软件测试网3R+JM gJj

  ① 首先设计你的测试案例51Testing软件测试网DGt:l G`

5IyW:A#B'l-@IK0  看到这个方法我就会有这几个想法:1,最大值 2,最小值 3,刚刚好的值 4,随便一个值 5,还有的测试案例会随着你代码中的逻辑而产生!

H{]n,a;r:oA m1I.f0

]J.ed:J/ND0  下面是我的测试案例以及方法名的命名,测试方法是上面的那个:51Testing软件测试网or7ffm

y OCE!q-iTF ]N0

kv!a Z1S1z0/// <summary>51Testing软件测试网 u3V u };v t
      /// Input valid bond ,but the cheque is presented Status.51Testing软件测试网 Ih5eS_;GG5Q(K
      ///</summary>
VV;`VQ v1gGN0         [TestMethod()]  //如果你预期有数据返回,那么就应该在最后面加上“RecordFound”,这样别人看的时候就能一目了然了!
5I!|1cD t$rV'K0         public void GetDetails_CheckPresentedStatus_RecordFound()
ug n:X1rD,O-R0         {51Testing软件测试网@6F7]gj9? a+J:A
            //To Do.
wnP)Ko"x0         }51Testing软件测试网3em`5z n;P\&B
 
Ir#|6gZ*Yh0         /// <summary>
OPY5_Jy0      ///Cancel Status.51Testing软件测试网f?1O*M E"vG f`
      ///</summary>
`+zI6KT9I1~|0         [TestMethod()]
\%bX0Cm,?0         public void GetDetails_CheckCancelStatus_RecordFound()
,UFD/S9l.y8s0         {51Testing软件测试网&sn^vNKl
            //To Do.51Testing软件测试网ZsQABmH
         }51Testing软件测试网~F&iW'Tr
 51Testing软件测试网:nB.qB&f`N'l)F
         /// <summary>
6o%Ur&Z7u*p u Z/{0      /// Input max.51Testing软件测试网VkLMMK J
      ///</summary>51Testing软件测试网7j y'[&U6?9t+x
         [TestMethod()]
4TqDW aF2E0         public void GetDetails_CheckDetailsByMaxBoundaryValue_NoRecordFound()51Testing软件测试网mj-LyWU-r)Hj
         {51Testing软件测试网 t-z I F)Gk0e2i
            //To Do.
I&}h#}unt S(P0         }
D:s[*F1d ^zqY0 
fq~iVs0         /// <summary>51Testing软件测试网 \z;o&D%G
      /// Input min.
pD6Hu.W0       ///</summary>51Testing软件测试网,y-H5ZI sOv mQ
         [TestMethod()]51Testing软件测试网] `z5`_9XC
         public void GetDetails_CheckDetailsByMinBoundaryValue_NoRecordFound()
#rt,Vlq9o U'd(u$w.JM0         {
,NS/[y(T!K%Q:w x0            //To DO.51Testing软件测试网fb{g*Z
         }
%eMkv_M0 
^*}tr#j6t,z9i0         /// <summary>
JQTJ7~c_ i&o[0      /// Any bondID.51Testing软件测试网mr5~Ba jg| h,~
      ///</summary>
&V e1]3HY0         [TestMethod()]51Testing软件测试网;^bIdoCY.n;N
         public void GetDetails_CheckDetailsByAnyBondID_NoRecordFound()51Testing软件测试网:_'Z!ud.I5GS[
         {51Testing软件测试网C&P+s0N;{
            //To Do.51Testing软件测试网 h2h+o2C3Q,RH
         }

TAG:

 

评分:0

我来说两句

Open Toolbar