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

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

51Testing软件测试网Hp@ c4r"}"mD

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

wn a;[1zyCy051Testing软件测试网w}ubS&w7DwH'd4XW

  这是单元测试最后一篇了,来做个总结把!51Testing软件测试网,cCu L \5^Ig D

51Testing软件测试网9Jb.w5g0}`f%u*d

  目录:51Testing软件测试网"m_I ~_7^$U8h

51Testing软件测试网J;T8PvAk

  好的单元测试应该具有的特点51Testing软件测试网1K E/iRv r*]-DL
  单元测试的命名规范
1tY!j|P5Ljf0  建立自己的公共调用库51Testing软件测试网3dqB#]Fj0{u
  单元测试带给我的思考和感悟51Testing软件测试网Z"lBp0F"`&m%W[(P5z$j
  总结图示
51Testing软件测试网.e@.u$jf:jm'N*R

51Testing软件测试网P*hY.K%NQ+I H

  1、好的单元测试应该具备的特点

CM{qgI0v+e7V3Gw051Testing软件测试网k Q8Z4nW ] Q7P6X4?

  一个好的单元测试一定有它具备的特点,下面就来说说那些主要的特点!51Testing软件测试网 yqxBh Y6?e

51Testing软件测试网w VQ*df,} fSw

  主要概括为 → A-TRIP原则:

&T/h t\(z D4wH U0

I&b&D+C fbd;i6?0  自动化  → Automatic51Testing软件测试网9V`~g1y8m9_f2~A

Z Vg(a,`0  彻底性  → Thorough

0ap6@Vv*u0

#f3_@)? |s s3i0  可重复性   → Repeatable51Testing软件测试网4]7W:R,zNA"^W

51Testing软件测试网%j3a U^F0kjD

  独立性  → Indepentdent51Testing软件测试网*`DV4R$r*zr8l

51Testing软件测试网j].JJ&j

  专业性  → Professional51Testing软件测试网oSC{T'p

#t:S ^hA*D0  恰到好处的单元测试会使你的工作轻松,代码整洁干净,乱用,没有准则的用会浪费你大量的时间,不但没有效果还会是工期延误,所有了解单元测试很重要!

zd5x*O\h k K0

}LAGI)mf0  ① 自动化51Testing软件测试网&p+C*qQ Kwc+L

P%Tj8@V$o0    a)不需要人的参与,有的时候只是轻轻的点击一个按钮就能自动执行,所以自动化的标志是不能比点击一个按钮的过程还要复杂!

6SS.np n9a[ KE0

$I+v I%iLS4Tr4C?0    b)在签入其它的测试代码时不能对现有的代码造成影响!51Testing软件测试网3N$vzoZ3Z0g

;Gx5i)nW0h0    c)能够自动识别测试是失败还是成功(VS2008以后的版本都集成了这个功能)!51Testing软件测试网ECDB)Ap9Q

51Testing软件测试网Q-yen1q

    d)在任何时候,任何地方都能自动运行(所以“Moles”技术就是关键)!

Gif{2[ b+x p$`0

:v7Dz"x8h3aQ0  核心:执行测试代码和检查测试结果都必须自动化(VS2008以后版本都实现这个功能了)!51Testing软件测试网"t0|BB`0U

51Testing软件测试网Ey&dh OK

  总结:I,不要引入一个由于需要手动步骤而打破单元测试的自动化模型的测试!51Testing软件测试网lz2iUu%]%NJ

51Testing软件测试网1jEG-uTw$i ufF

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

D7zc%T9k1?ci+~051Testing软件测试网oX7{*?fl$R9D-}9k+z9jg

  ② 彻底性51Testing软件测试网g{.HY:X-EVWaA

51Testing软件测试网7d/Xj1`&mb7b#uw

    所谓的彻底性就是说你的测试案例必须要考虑的全面,应该把可能出现的问题都做成测试案例!51Testing软件测试网-x*A8p J` f

M*v:|hj/ba `-Qz0    具体从哪些方面着手,可以参阅这篇:走进单元测试:测试需要从哪些方面着手

,Ex+M.O a1^051Testing软件测试网Yf$Xwa8y$Y|,S't

  ③ 可重复性

2e }tiCbk0

1dw*O:d7T'M#L CJM0    a)每个测试案例应该独立于所有的其它测试,而且必须独立于周围的(系统)环境!

gi'N&Ob~UB0

BXWo"\ D%V+KypD0    b)测试代码能够一次又一次的运行,在不修改代码的前提下都能产生一样的结果,否则有BUG!

\5s WOD051Testing软件测试网s*sFy6M;}1c/R

    c)不要把测试代码写死,应该写的更加灵活一点,运用封装,重构等等的思想!

9n6I+RgY6r8@er K0

["v&iO~,]7IU3P0    d)不要让测试本身也出现BUG,确保测试代码的正确性!51Testing软件测试网9Dp u4mq1p A}4?

51Testing软件测试网.`4w5q&w&}N$y;~1q5e

  ④ 独立的

!s/fAs,^0

(r.Pi-Q!g'rS0    a)每个测试应该有很强的针对性,也就说一个测试只能测试一个方面的内容!51Testing软件测试网$EY9Zf*\J[

P1t os&a6O[0    b)每个测试应该独立于环境(软件所处的系统环境)和其它测试!

9]\j@ q3aNGG051Testing软件测试网 d0mL+_yV [-l.tO

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

pI7n\^Iwm%e051Testing软件测试网\Kyd-e.E

      II,所以测试一个函数都有很多个测试方法,只有这样才是真正的测试!51Testing软件测试网6DTE1KggQAk

4[VV*o3ZB m3q As0  ⑤ 专业的

4Awu(@{}$p T1Fjb051Testing软件测试网'M] k8h)[qWn$Q/GZA

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

;OB1Nvv3hcE0

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

R!FBoRUr051Testing软件测试网Dxgc9q4z?;{

    c)遵循普遍规则:1.维护封装 2.降低耦合!

L[|8|'Lb0

~ _c0St'\?0  总结:不管怎么样你都应该认认真真的对待单元测试,代码的质量要求都应该跟开发代码同等水平,这是作为开发者必备的素质!

ob Od p0uK4`0q o051Testing软件测试网*NyL#b7NC

  2、单元测试的命名规范51Testing软件测试网8Rz_Dj `o'Lhi

51Testing软件测试网}Vf*n'T\m

  在我们项目的中,可能需要测试的方法有成千上百个,而每一个测试方法都有可能写三个以上的测试案例,那么怎么来维护这么测试案例呢?51Testing软件测试网 Eg0tT5`2Q

51Testing软件测试网r.Xb2_S

  所以我们应该规范方法的命名方式,那么其他人在阅读你的测试代码时,直接通过方法名就能知道你的测试案例是测试哪个方面的了!

@"?.U5YdI051Testing软件测试网ZL1Dc3@u&@

  Note:单元测试案例类似于一个可执行文档,可以帮助其它的开发人员了解方法的作用!51Testing软件测试网&q:w-gU|3f;A v

pGH3Ol4S-p:cD0  在我们的项目中是这样规定的:方法名 + _ + 你测试是哪个方面的内容 + _ + 产生的结果!51Testing软件测试网8aGMbm+P&H6~3BI3i7P

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

+n;jDS'n%K7o-O7u6a~051Testing软件测试网8fR*m R_,zV&QJ

d3K6N@(QubZ`0
1    publicDataSet GetDetails(intID)51Testing软件测试网0a3F(q
J$Kj
|6ER
2{
)a Y)hfz-Q03   // 方法的作用:这个一个获取数据,并包装成一个DataSet的方法,传入的参数是一个bondAppID,那么我们怎么来设计案例和命名方法名呢?
5}

(Jjld{[0  ① 首先设计你的测试案例

g?(}oFJ0

0E-e9Q(Q M\5q0  看到这个方法我就会有这几个想法:1,最大值 2,最小值 3,刚刚好的值 4,随便一个值 5,还有的测试案例会随着你代码中的逻辑而产生!

~| A(X6_0

4YWk%t%F&_0  下面是我的测试案例以及方法名的命名,测试方法是上面的那个:51Testing软件测试网R P G |~"H1r-z6`/G"K

9u1C.No8~7G'Y/L$\051Testing软件测试网 ms(lO%y+oQ-ncMv

/// <summary>51Testing软件测试网%g.[F2ez Q
      /// Input valid bond ,but the cheque is presented Status.51Testing软件测试网)_L6`:d[ HO
      ///</summary>51Testing软件测试网Pm+p{NhXl|8`
         [TestMethod()]  //如果你预期有数据返回,那么就应该在最后面加上“RecordFound”,这样别人看的时候就能一目了然了!51Testing软件测试网i`$M!I&k6vL
         public void GetDetails_CheckPresentedStatus_RecordFound()
c7g;lL9|0         {51Testing软件测试网0KO9^],JpP4y
            //To Do.
"WH/Y0[2lIBV2T0         }51Testing软件测试网J_+HysS,@ Zf'V
 
.M S,L8L#p7]0         /// <summary>
AW:@;O OZ#xi%U0      ///Cancel Status.
"@f3`.f4f8W0      ///</summary>
tbx~oj-_0         [TestMethod()]
ug/jP ?O5{en"a0         public void GetDetails_CheckCancelStatus_RecordFound()
)`a j5SUM q;D0         {
4S:FI&X5[/LX8~ w0            //To Do.51Testing软件测试网Zaw8Zv l
         }
#B+vO7n.G_(X,^0 
K5K!yt+g0         /// <summary>
d3|0n$N @0      /// Input max.
2a OyW\w6i5k0      ///</summary>
^K:P |0@1p0         [TestMethod()]51Testing软件测试网W_ @Nd0~1xg|&I@
         public void GetDetails_CheckDetailsByMaxBoundaryValue_NoRecordFound()
0w&s#d|b0         {51Testing软件测试网J @C{`
            //To Do.
8K_I4s{;@/S ]0         }51Testing软件测试网e u'iWM-d2l
 51Testing软件测试网-EP$O r5j v,v
         /// <summary>
G,j;NZ5U*oU@0      /// Input min.51Testing软件测试网b6o+W'{6BW
       ///</summary>51Testing软件测试网IT2F}v d,[6s7m}+T
         [TestMethod()]
_ s S7|0TT#U0         public void GetDetails_CheckDetailsByMinBoundaryValue_NoRecordFound()
*^I*B+Y(AZ YJ0         {
,SnZ1y4W0            //To DO.
%Vr RH6U R}9[0         }51Testing软件测试网Ve ?;\0_ v4h%{ U*K
 51Testing软件测试网 Y&h(s-C*b^&T
         /// <summary>51Testing软件测试网:Za ^(n w9H%X
      /// Any bondID.51Testing软件测试网0P"C1Hy?Y
      ///</summary>51Testing软件测试网)lkjd,DK
         [TestMethod()]
5CDO;L6[0         public void GetDetails_CheckDetailsByAnyBondID_NoRecordFound()
G1c{+b+u-l i7@(s0         {
.d4^w&T P%n0            //To Do.51Testing软件测试网`uw!T8~[ j
         }

TAG:

 

评分:0

我来说两句

Open Toolbar