少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲,则国胜于欧洲,少年雄于地球,则国雄于地球。红日初升,其道大光;河出伏流,一泻汪洋;潜龙腾渊,鳞爪飞扬;乳虎啸谷,百兽震惶;鹰隼试翼,风尘吸张;奇花初胎,矞矞皇皇;干将发硎,有作其芒;天戴其苍,地履其黄;纵有千古,横有八荒;前途似海,来日方长。美哉,我少年中国,与天不老!壮哉,我中国少年,与国无疆!

java单元测试篇:使用clover为junit单元测试做覆盖率分析(二)

上一篇 / 下一篇  2009-09-25 12:39:31

51Testing软件测试网;r.uwT-\m

之后,我们创建一个junit测试代码MoneyTest.java,来测试Money.javaMoneyBag.java类,这里我也把它放在src目录下;如果企业应用,你就要把目录分析的详细些,例如src子目录下放所有的java源代码,test子目录下放所有的junit测试代码:51Testing软件测试网GS?;| [pFA9y

Z$a.W j9{+Ji,B#a0import junit.framework.*;

Z pi;yu};ovL2W,[0

?QXT6o$h0public class MoneyTest extends TestCase {

+Ql&fDd0

n1p-N M+m9HA eo0private Money f12CHF;51Testing软件测试网\u5Ri0TA

4W)` lqH0private Money f14CHF;

1~1f_9aF6s,G051Testing软件测试网:g\)d6zD]1T[p

private Money f7USD;51Testing软件测试网'LQ dm |h(?+j)M

N'y1a1Fd [5A"X;_;`O0private Money f21USD;51Testing软件测试网 _BU8V7N

3EkGzqcHE~W051Testing软件测试网k8T*H3K+r2Aj \T-ct*a

51Testing软件测试网 x:fc"q&OB*n;k@

private IMoney fMB1;

|@]o3@d-Ne0

-jo.O6nr0private IMoney fMB2;

I+S6l*j MD _Ty!{051Testing软件测试网/L#H?5VY XJ?EfJ

51Testing软件测试网xr O8hdIz x

0k1|*_ UOY(L0public static void main(String args[]) {51Testing软件测试网%|g7_^p9P`2aD.V

51Testing软件测试网D2D.F%^s5D,Ns+i,s0X

junit.textui.TestRunner.run(MoneyTest.class);51Testing软件测试网 r0[v WU

51Testing软件测试网\9cpl [

}

jE*h)[Cz0

1LY+w5ce L}0protected void setUp() {51Testing软件测试网{}7ID'|3Ga6M!j

!V6zmB'K;~$H0f12CHF= new Money(12, "CHF");51Testing软件测试网 |%n:LUOp4d

]5O[zt9r Q}#O K0f14CHF= new Money(14, "CHF");51Testing软件测试网klk)c5e~t

.o2n}f{e0f7USD= new Money( 7, "USD");51Testing软件测试网fF#cp3r |N

51Testing软件测试网7V]:wt,s;qmH7f

f21USD= new Money(21, "USD");51Testing软件测试网b SX5@ C'w

e*~A:n*V R2z0}0

P*k?4G-[]iW*x$Y1m051Testing软件测试网0qfS{t

fMB1= MoneyBag.create(f12CHF, f7USD);51Testing软件测试网0_+X-?L,CR x([

~uR+owW"r0fMB2= MoneyBag.create(f14CHF, f21USD);51Testing软件测试网 Q0l'e,G D%V)R']e

51Testing软件测试网.tEW2p&V-@?f6k

}

*Z6W8{0_$T8\]jP0

Cw*n6oY0public void testBagMultiply() {51Testing软件测试网|6q"Uxx~

51Testing软件测试网-I7H)@A8oH5]]^

// {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}51Testing软件测试网0t YD({.~7^N0h[

SA5\0ehm-{4J'E0IMoney expected= MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));

#h$L1`G7wu_051Testing软件测试网q0pb*Q[n7xT#c

assertEquals(expected, fMB1.multiply(2));

s@.v$YD051Testing软件测试网*a-Vvg|~h

assertEquals(fMB1, fMB1.multiply(1));51Testing软件测试网*BgW tRz#cGU

51Testing软件测试网0c/~/_}3r+cR*B

assertTrue(fMB1.multiply(0).isZero());

g,M?'m#B0W051Testing软件测试网$f,q B*HL

}51Testing软件测试网![ W$S8A.zk

u#]O)?*k$Ay0public void testBagNegate() {51Testing软件测试网 kL o!A1Q

5p`K@f:@0// {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}51Testing软件测试网 \ wwU"D:_'?:D

51Testing软件测试网U"f,\!]!J4~

IMoney expected= MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));

P:xcX0X&C;d0

&G le4S,Q!e0assertEquals(expected, fMB1.negate());

8ZVX&mW c051Testing软件测试网"@$KE*o u5m @#} ns

}51Testing软件测试网 _.V)n@&BO0J)UR

&?Y ^ y0\+[s }:V0public void testBagSimpleAdd() {

miL ],k I.?051Testing软件测试网JpAq j}y5i AFt

// {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}

7ck(A#~}UX6FO%Tg%C }0

QU(?%N:A4QF7Lnj8g t0IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));51Testing软件测试网"j4Y}(n#L+Yt

Pl:g2Wx/@bjH0assertEquals(expected, fMB1.add(f14CHF));

5S0e,sN;s/j+M0

H8ZX9nA0}

+Z:GZx;n@0

,j0lBU\uhy0public void testBagSubtract() {51Testing软件测试网VC}CO,n"s

51Testing软件测试网(OW3s#c$e%e g3m

// {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}

#Zyp9OO;b S| Cm,v(R051Testing软件测试网,u @_%f3jF;tL

IMoney expected= MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));

6d T|5O2Y051Testing软件测试网7{wey:H EM-o VGm

assertEquals(expected, fMB1.subtract(fMB2));

)THObg'I(b:C8j051Testing软件测试网.`k.[$`Erw

}

Z3P.s ]!iG3|6}$O051Testing软件测试网 p+E-YENm4di0r~aj

public void testBagSumAdd() {51Testing软件测试网*q9|B6^aCNuUT0e M

51Testing软件测试网4L+w4C2`-@;Sr

// {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}

:kO*j-PN:O%u$^[0

,c(}0GrE6I-b0IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));51Testing软件测试网V4x H)L4j'^!B

%l:s9sJ Ie0assertEquals(expected, fMB1.add(fMB2));51Testing软件测试网$I @@5cz

0b\y.Y5j N iy5^0}

0b0?5X"mG"@:Y8T,G0

Fm { N9CM/pVl0public void testIsZero() {

bAQ+J:W;Kl051Testing软件测试网o0V6d.R1r5B JN/Iat

assertTrue(fMB1.subtract(fMB1).isZero());

WlI1i-j V8b0

$x`3h.u+v_ dz SrS0assertTrue(MoneyBag.create(new Money (0, "CHF"), new Money (0, "USD")).isZero());

r4w~~-flv`:jg0

e3N)oV a r C {0}

X [6T]C \.]%f._ Hp5F051Testing软件测试网fk6H!MA}}9k|

public void testMixedSimpleAdd() {

'a)}g;lf e051Testing软件测试网/nkH y4l!n+Bv

// [12 CHF] + [7 USD] == {[12 CHF][7 USD]}51Testing软件测试网 Y4XIPs]o

g8o8qb8_ X#j0IMoney expected= MoneyBag.create(f12CHF, f7USD);

$D3K} J7rW!Sx051Testing软件测试网i:z B eS(j;G;_

assertEquals(expected, f12CHF.add(f7USD));

.D^M[ W P}q051Testing软件测试网a$J5P2I!\4ZvTS

}

B^hE/BX't2LN0

8yN,C(O6p`Ia Q-I0public void testBagNotEquals() {51Testing软件测试网j5m@}'@Nd-C)@

X:n.r W!VXS c5U-w0IMoney bag= MoneyBag.create(f12CHF, f7USD);51Testing软件测试网5["n-c)dGSg6}

51Testing软件测试网 d Fv/A8i @;U'k

assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));

n#fN7?8DB]Rhrr _0

h2?6\8Q w*JCT[0}

E_D#D/}5q/Je Vc9n051Testing软件测试网`I2Dg#~"W7{:i(K

public void testMoneyBagEquals() {51Testing软件测试网}(eZ4BY p

51Testing软件测试网m7B-?c t3b P'c3]P

assertTrue(!fMB1.equals(null));

"@y&L-B u.I0

a_| V$z+L@D0

tM-o{6h7O'bX/T i0

/G6n-Ri Q,`x0assertEquals(fMB1, fMB1);

0hM%]S8\lXw051Testing软件测试网odS PiWe

IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));51Testing软件测试网 a(]-Iy4Q {

-l7h/M0k#h.MZ4{dn0assertTrue(fMB1.equals(equal));

:J1y"T6h7m E*`:@0

1e,x7k~8uEP0assertTrue(!fMB1.equals(f12CHF));

v+k {4?q)pP$B f051Testing软件测试网MlsaMs#L+} O2C

assertTrue(!f12CHF.equals(fMB1));51Testing软件测试网N@ ? jER,zLh4?

J7T.n-]/Vx9` ~0assertTrue(!fMB1.equals(fMB2));51Testing软件测试网8q`!H%_$A

51Testing软件测试网 o0w8KlGJ t3RUC X

}51Testing软件测试网n @g9s]4_pt

6g _#Z ^0I3ql;|0public void testMoneyBagHash() {

5Z#Ezjb2Go/F&l0

\5`;w#GlJ0IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));

a#z1KQ\%kA!k051Testing软件测试网0\e&lES(o7~o7]

assertEquals(fMB1.hashCode(), equal.hashCode());51Testing软件测试网-~0`8Z1s-?*xN%S,U

#^%a w@@3k]'v9wB0}

0j/jeg bP%d051Testing软件测试网#Vur"Wq*CQ#}I_s

public void testMoneyEquals() {51Testing软件测试网-\P{c0a Tga(Z

51Testing软件测试网%H0} o![(^ir a

assertTrue(!f12CHF.equals(null));51Testing软件测试网-E^(h4aB&\"a

51Testing软件测试网!@jV2v6[N4o8eb1?

Money equalMoney= new Money(12, "CHF");

l7}B Dx051Testing软件测试网N_)yvB*U!k;U

assertEquals(f12CHF, f12CHF);

5AUSqPS051Testing软件测试网5} J&M,G9yWT2^x

assertEquals(f12CHF, equalMoney);

o0fJ u1CJY051Testing软件测试网K d V!X4nqF

assertEquals(f12CHF.hashCode(), equalMoney.hashCode());

ZV/R'Ox W7S4gJv0

T;T*{Sy7Jw"O0assertTrue(!f12CHF.equals(f14CHF));

`X6SM"u0

2}} K[;?~0}51Testing软件测试网-s1H.h5P}v(d Ub1av&D

9i7i3a._,VOB0public void testMoneyHash() {51Testing软件测试网Ya)r ZMhiN'l

51Testing软件测试网0T4Y0P1e&`W,Wv;ew

assertTrue(!f12CHF.equals(null));51Testing软件测试网F1K'Rq%b{S2F0y

51Testing软件测试网]ty+]{7u1Z/E]c

Money equal= new Money(12, "CHF");

%w`x/ng-N0

"U"D s~*kfiU;q1^0assertEquals(f12CHF.hashCode(), equal.hashCode());51Testing软件测试网+E@'Wspf

51Testing软件测试网i0Il0C4MHi^

}51Testing软件测试网Y r9h)A(xL7O

ymY n}P0public void testSimplify() {51Testing软件测试网vR5N R?8ap$e J?9u

w"l5x;DRn`pK5t0IMoney money= MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));

8C!jlRF#kjv/[nZ051Testing软件测试网9R'I5GF6?8t_{R&{-Y

assertEquals(new Money(54, "CHF"), money);

!B H/u xf-Dd5s,gLd0

%|+P6h([7Gzh+Y q0}51Testing软件测试网$wo CB;A,Q+Q!}$j1Q

51Testing软件测试网0S'JTFP OY2m-X

public void testNormalize2() {

W+C t H,L,S;p051Testing软件测试网:Vl us(x'Mi;O

// {[12 CHF][7 USD]} - [12 CHF] == [7 USD]51Testing软件测试网V?gKr*HlPwp

51Testing软件测试网jefrD9n{7~

Money expected= new Money(7, "USD");51Testing软件测试网su*b8V bMF4s

%s1S2fw)Zz y)D:?3~"y)r0assertEquals(expected, fMB1.subtract(f12CHF));51Testing软件测试网ye'l-w?q$S(Z"m

51Testing软件测试网 Jk7Oqg$lD o9O4aN

}51Testing软件测试网?HW ?{ _Q:G]

51Testing软件测试网Y{o4t9m+VZ

public void testNormalize3() {

nq9j&D6v0

;yC;Fq\Q0// {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]

k4b1S$b C `051Testing软件测试网\|-n$Cp+ysBd

IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));51Testing软件测试网CI|-CgJet

51Testing软件测试网)sx2P{GXF

Money expected= new Money(4, "USD");

x,mV`R\WE051Testing软件测试网!u%piO9eQ

assertEquals(expected, fMB1.subtract(ms1));51Testing软件测试网)RPKv%i;[_(D

51Testing软件测试网b7R.E,W)@'gl&y"^

}51Testing软件测试网,t*p3n@WP"Z!N

51Testing软件测试网3H~4S ~2}_v#h

public void testNormalize4() {

s@(Y+UY7k0Q051Testing软件测试网5L;U&h3u'qR4}!Z){

// [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]

fR.zp!oI0

X%Q_Wn0IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));

RN1}jm@my&W1g051Testing软件测试网"jJOT&xz6n0\

Money expected= new Money(-3, "USD");

9OL tj?f"S@ R0

8a\q)Qz{4X0assertEquals(expected, f12CHF.subtract(ms1));

|+QA oVoK,y0

OKm]+J4ba0}51Testing软件测试网G r2X.RWWu

c k j;F%vki)w0public void testPrint() {

P C;yA!}G!\051Testing软件测试网%M&^}$MQ8m(Qk"B

assertEquals("[12 CHF]", f12CHF.toString());51Testing软件测试网 YT2b`S0u(@yF,C[7A

51Testing软件测试网9PM\2`/N X_u`V

}51Testing软件测试网g%K9M p&F_+CtE+f

51Testing软件测试网2X.Uy,jGK

public void testSimpleAdd() {51Testing软件测试网deV)f EW Z

4B}3b#^BB%^$rJ0// [12 CHF] + [14 CHF] == [26 CHF]51Testing软件测试网$w%h&yr~9BX3^

tz|P\%E [ Z0Money expected= new Money(26, "CHF");

_|&}/_n3H N051Testing软件测试网V3F1IkM#G vg

assertEquals(expected, f12CHF.add(f14CHF));

;kF,_ m S*f0

4k"lE]HA1WWd0}

/j#w*rd/^n e0

'a*sp+II0public void testSimpleBagAdd() {51Testing软件测试网!~]%n*z8ga(P

51Testing软件测试网7H b/X._![BD X

// [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}51Testing软件测试网8\8l/Nu `]+?Vi

51Testing软件测试网6W4Q*S6fhi

IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));51Testing软件测试网nS/TyT

NE3^(c?@-c0assertEquals(expected, f14CHF.add(fMB1));

:n2{/Q x JK2XJ0

zTZG$fWz"j0}51Testing软件测试网 r x UG6Vz| zcg

51Testing软件测试网\"e`W`LZH ^5l

public void testSimpleMultiply() {

:d&?0DC C |Qu051Testing软件测试网n6r7E [ y8y&F

// [14 CHF] *2 == [28 CHF]

`^I%[:prQ0

mzc v9zU0Money expected= new Money(28, "CHF");

6e.BW#qx"|)g0

k*Xs4i2{&j wf0assertEquals(expected, f14CHF.multiply(2));51Testing软件测试网$q)V:~W8Y#[yw;Nc

51Testing软件测试网"_Nr5bq+M)kii

}

0u\7whS@)X051Testing软件测试网PfkG+Dd#w7~ J

public void testSimpleNegate() {

%@a&` Vw-R+mF9q_0

] c']_!I8]:^0// [14 CHF] negate == [-14 CHF]51Testing软件测试网Q9a*rY0y3xp2L

51Testing软件测试网V(P1fp'oSC2G

Money expected= new Money(-14, "CHF");

;P J+E3_"V8c YN0

0_3[3v5fG`er)D0assertEquals(expected, f14CHF.negate());51Testing软件测试网o Qg%l$J6et}+Y

F!^+v@D0}

nU/N8g1Kbo j&T#m051Testing软件测试网 `U.TU5@JW

public void testSimpleSubtract() {

PPf+ug j-EX#~g051Testing软件测试网jY.y7G]YLL

// [14 CHF] - [12 CHF] == [2 CHF]51Testing软件测试网3^(Q,g&|"W,dEg

\-t-f)E Q4L/l0Money expected= new Money(2, "CHF");51Testing软件测试网7]V Si2q1d`0S

51Testing软件测试网4ri(E+xmw8|yu

assertEquals(expected, f14CHF.subtract(f12CHF));

i(i^yOu0

6|q.a1t~4D/wB0}51Testing软件测试网b ^C5du:i^

v@`W{;s"q0}51Testing软件测试网i a(l%xP5e(i

_oD.j)sY]-X4hK8H0二、编写ant文件自动运行java单元测试

)Wv5I@ da/sA:I0

6|+m#e2I0r0

Ar)^;r y6y#D0

eV%]X0Md6Hu1K0之后,我们在sincky目录下,创建一个build.xml文件,完成它的编译和测试任务,这里我为build.xml文件加了注释,供大家参考:51Testing软件测试网yE4[7V&[.d F

8P0l'|W4Q5}N0的项目名称叫money_demo,默认执行的任务是compile,根目录指当前目录,也就是sincky文件夹-->

G+teYL~tx051Testing软件测试网@^:T:o6e%b[w#A.rl

^(o6i@u3\,x8_!b051Testing软件测试网0BH+]5rIP)?'] b

51Testing软件测试网lekJY:{2A

!mUA-IB7H [-Ae0moneytest build file

J9xg/m9o9M [},}i051Testing软件测试网bO@7b7I

51Testing软件测试网I8u_$qD)fZ

51Testing软件测试网7nc ^pR#[8f,Y

定义一个属性src,指向src目录-->51Testing软件测试网 C |svz6A@+d9ug xA

51Testing软件测试网BX7Z?jdb

5P)rd g5[ ~B9v}0

7yRO.NH2l'B0定义一个属性build,指向build目录,这个目录放置所有的编译后class文件,该目录目前没有创建-->51Testing软件测试网%m s,lW|1y\&l$h

4i*Uz?+o3O7J+O#Tf051Testing软件测试网#o3o1i|L'l M/|l

,NZ[C&q2H-E0定义一个buildclasspath,里边放置后边任务里需要的依赖库和依赖路径-->51Testing软件测试网!nRg!xO{u4s0`

/kew4Y[!TXqs051Testing软件测试网m%V7JX*~*N1Z1H/JZX

O Q'Z] VH r0

:q5|!i(ic*c)[051Testing软件测试网? v#t$_5E

51Testing软件测试网%WGw#}w&\?

51Testing软件测试网o {HWB

51Testing软件测试网)c6T^?h`

#{ \4E6qA0Qy9[4]051Testing软件测试网j$za hz/M3Y8p

51Testing软件测试网/NsZW"^ I

7v*fX;F2U!l'A051Testing软件测试网Lylhw g%@1E x

:\@8{7{-v U0H l4b0

(N*tFUX2J051Testing软件测试网D0Z7V1n5X

51Testing软件测试网 f.Y#Q^ z5D

PV ]6v W$hq051Testing软件测试网|!qzd-h7V(uD

51Testing软件测试网6t WaTtN&nT;@DL

51Testing软件测试网zr2kh)d&J

+]y'jpK051Testing软件测试网4pe7zX1|WU

fork="yes">

@Txt+z1ds&^051Testing软件测试网L5z9zs3t7T#_X6X

1meT yW4uQ:H(JK051Testing软件测试网7yu#DBEX

51Testing软件测试网;_ hn0OX [UM

.jz3`XX/~j |051Testing软件测试网.e!DzrA5lkY*c

51Testing软件测试网(E"vYNur!r)mG

51Testing软件测试网3}:rIhV_x

51Testing软件测试网o8_1Mu1P

!c)F3W7l~8Ab B051Testing软件测试网%s:i#^.QK

51Testing软件测试网7E nF6HL2Z}+m

Gi~T br051Testing软件测试网A/V'Fg9j(r~On:PY

p&W-p$GL051Testing软件测试网 g/d}kT6m6P

51Testing软件测试网 @o2?+p6PRh]

之后,我们开始运行build文件,开始编译任务:打开cmd命令行,进入sincky文件夹下,执行ant命令,会看见类似下列内容的效果:51Testing软件测试网2V;b eH#@!Ei*\

fxa Ko#d Z0k0C:cloversincky>ant

1Y LD `ROG3P1W051Testing软件测试网6UA8Nz{%~/[k

Buildfile: build.xml51Testing软件测试网oJe;H/_#Ic}5y

loJz \0Fm_\0compile:

]4k1jd7m\$z(A_u0

*]O e G2zr-C0[mkdir] Created dir: C:cloversinckybuild51Testing软件测试网*E#^`FFQ1gl+kR j

51Testing软件测试网!eW1H8m1ny

[javac] Compiling 4 source files to C:cloversinckybuild51Testing软件测试网{R:x2udz"Qj

51Testing软件测试网/b{,rd j.Np*k

BUILD SUCCESSFUL

Z#J bGu0

p!Vv+WN?i"F"{e+Y0Total time: 4 seconds51Testing软件测试网i ]!p$Vu?V

+s3q{IEfM uM0现在你会在sincky目录下发现多了一个build目录,进入build目录,看见里边编译好的4class文件,恭喜你,这个任务胜利完成!51Testing软件测试网il B ~G?;O+K

51Testing软件测试网7b{[B%[

下面我们来运行单元测试任务:

~l0o4RC1c#p5J?j051Testing软件测试网,g'W9o*h {"x

C:cloversincky>ant test

i;g#ZD2gD0

+^#A4LQ&G:k(]9loU#}0Buildfile: build.xml

Lm @%p:e\5V051Testing软件测试网;^Km@E P6N

test:51Testing软件测试网]N4c N7a ](x@

51Testing软件测试网M"[6V;a?'p7l P

[java] ......................

$x1r/L{a:g051Testing软件测试网-u2dD(p+oJ

[java] Time: 0.016

0m:}7e4FR051Testing软件测试网D#bz$l@

[java] OK (22 tests)

Ymcu&nH D0

L'y]%D6h({u T`0BUILD SUCCESSFUL

1@3` ^ ga \0

+v V f nm5x:c2O1gl"m?6~0Total time: 1 second

^e%r/X6[.vB051Testing软件测试网 M`DX7cU

可以通过结果看出,22个测试用例全部通过;junit里边测试通过是.表示,测试失败是.F表示。关于ant的命令帮助,你可以输入ant –h查看。51Testing软件测试网u(a3Tv}"U%H)y"P

51Testing软件测试网%M9D+Q*C1V-wqB

AMU HM.?0

TAG:

 

评分:0

我来说两句

日历

« 2024-04-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 20852
  • 日志数: 27
  • 建立时间: 2006-12-22
  • 更新时间: 2007-07-18

RSS订阅

Open Toolbar