起步于系统工程师,迈进入测试工程师,从起初的C/S系统到互联网时代的B/S系统,从事过电信增值业务、软交换、烟草OA、公安技侦和电子商务等行业的软件测试开发和管理多年,愿与大家共同分享共同交流,关注软件项目管理、测试团队管理、软件流程控制和软件性能测试及自动化测试技术。互联网时代,技术推动进步,欢迎人才推荐:jonas.wangl@alibaba-inc.com

Agitar 工具

上一篇 / 下一篇  2008-11-04 20:47:34 / 个人分类:单元测试

     传说大名鼎鼎的AgitarOne就不用解释了,在昨天的随笔中有一些解释,今天主要说说Agitar 中Mockingbird的使用。51Testing软件测试网E(JC9Ts9e/|m

        为了提高测试代码的Coverage,仅仅靠AgitarOne来处理2K多行的方法,是肯本不够的。我现在搞的那个方法覆盖率才20%,不过比同事的 10%好多了。不过都是测试异常的Test Case,一个正向的Test Case的没有。只能硬着头皮看人家生成的代码来提高代码Coverage,在AgitarOne生成代码中,大量使用了MockingBird来 Mock对像,对于Mock对象我想大家都应该很清楚了吧。下面我将概要的介绍以下AgitarOne的MockingBird对象。51Testing软件测试网Cv8j'JcK#nX

9p$T At$iz0        MockingBird 最主要的也就是以下5个API:51Testing软件测试网+f G ~4ELyE6L5L5MK

9|jmy7U!Q3we0        1.MockingBird.getProxyObject(), 该方法是创建一个Mock实例,比如我们想创建一个XXXHome 的mock 代码如下:51Testing软件测试网-[ jP9k[

51Testing软件测试网smbf6@1uG2w)P0p

        XXXHome xxxHome =(XXXHome)MockingBird.getProxyObject(XXXHome.class)

wmel2~[C"^051Testing软件测试网'V.QrX9^I

        2.Mockingbird.setReturnValue() 该方法指定一个方法返回特定的值。比如我们想调用getConnection 返回一个Mock 真是的Xmock对象, 代码如下:51Testing软件测试网8`'Twe{&{$^

51Testing软件测试网M!Vu;T0]-NaA

        Mockingbird.getReturnValue(getConnection(),Xmock)
h_9Ip%^"s;l,j0        ;
t2@%Puy GC&}0        3.MockingBird.enterRecondingMode() 该方法就是使MockingBird进入录制模式。现在不好说清楚, 下面会有代码解释。51Testing软件测试网9C:}XW2C%i

-JK$o!U9mN0        4.MockingBird.enterTestMode() 该方法就是使MockingBird就如测试模式。51Testing软件测试网@TT$e_;n h

51Testing软件测试网7F*b$C b+}/@9K

        5.MockingBird.setException 该方法使一个方法抛出异常。比如我们想如果调用getConnection 抛出SQLException,代码如下:

M ?0@d1HV051Testing软件测试网Fh.v a|e

        MockingBird.setException(getConnection,new SQLException("sql exception!"))51Testing软件测试网r0k$O&p{,F1S G

K2J[@ Scr&i(r0        下边将表述如何使用。

't1v1t K!k0

G^0y)e9m"v(]^O/K0        假如要测试以下方法,在这个方法中使用了第三方的代码,比如是EJB或者是数据库连接,那么我们在测试这个方法时难道好一定要有EJB容器或者真是的数据库吗?51Testing软件测试网3M)LQ-M/Tw,?

mO6c9{h lJ"c_:V%U"@0        使用了MockingBird 就OK了!

4m ]LD5S4t3N051Testing软件测试网v4K[i;c*J:c

        private int getValue()51Testing软件测试网6gP d+[p%bFHF

51Testing软件测试网S)\e5Q6cT ASL*G

        {

Q@"VX4AwiCq4gN0

zxI;U2H E5Qi}0        thirdPart x = Global.getThirdPart();

9f#V%K1|f3hU7@0

Vap2Ton0        Connection connecton = x.getConnection();51Testing软件测试网_ T4S&xQ#c,@

51Testing软件测试网d5a |uB!a_

        return connection.getValue("test");

{0gPO9g/Wu`051Testing软件测试网9f)J Yn4y*Z-~1q{

        }

R`!V"P@%[051Testing软件测试网J v)GE%]F nW

        对于Global.getThirdPart() 我们可以Mock一个thirdPart 而不是实际的对象,同理 Connection也是。首先我们创建两个Mock对象。51Testing软件测试网:XrFY:F7l

51Testing软件测试网/UI&hI+i

        thirdPart x =MockingBird.getProxyObject(thirdPart.class);51Testing软件测试网;w|+EK)N\

51Testing软件测试网-YGB;xVl0j

        Connection connection =MockingBird.getProxyObject(Connection .class);

(E0ZPWl{0

"C @*cF7z)b4v4t0        // 进入录制模式

)B1t(gTwA3GX-B0

0NqMPgs4z0        MockingBird.enterRecondingMode();51Testing软件测试网I G_-R(~B!c

|.QW#[O](AK$H#^0        //Mock Global.getThirdPart(); 方法51Testing软件测试网f5e,k&Y`2\R.N GB

51Testing软件测试网 f:z9fIJ^{1u)w@

        Mockingbird.setReturnValue(Global.getThirdPart(),x);

&l\B1A/X\M0

SJGaOC _}0        //Mock x.getConnection(); 方法

u_1{P4I)w!M.KQp0

F%[.O;g#t^"i0        Mockingbird.setReturnValue(x.getConnection(),connection );51Testing软件测试网*gk)p%JA#v I

y x R)NO*a ?l!Mf^0        //Mock connection.getValue(); 使之返回为4

3u!E0xV {1w ^!]@0

.mT`k,Z*x%]0        Mockingbird.setReturnValue(,connection.getValue("test") ,4);51Testing软件测试网Gb"z~b+Y

51Testing软件测试网 A)Zk&a:r/N3O

        进入测试模式51Testing软件测试网,N B^&Ds

51Testing软件测试网s9b1i(vWL

        MockingBird.enterTestMode()

wNR6Ch2?0

VF#gt[i$S2o v&g$x0        必须先进行录制状态进行录制,然后才能就是测试状态使用之前设置的录制值。51Testing软件测试网n#@3]/VP8_ _oof

'cDiO-kM3{N0        然后对于这个方法的测试将很简单 只要调用给方法 看是不是返回4就可以了,完全与环境无关。51Testing软件测试网F4T-^,P-]p5Q4J|#u


TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar