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

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

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

51Testing软件测试网&c+_#a0W\%Pe/?9k

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

51Testing软件测试网O+b5Z)M%M:IwWL+U

import junit.framework.*;51Testing软件测试网"CL+l0ZO Y.J,?3h

XP$W2q M/fek.p0public class MoneyTest extends TestCase {

b}.P3N7a[;KZY!h KW4e0e0

P:Zq$w8Jg$E0private Money f12CHF;

5j!hr@ n&^051Testing软件测试网#{xg|U;C8Z];[3^EV5s

private Money f14CHF;51Testing软件测试网R-OL J,Q.I/f

v-UT'EnN5JX/v0private Money f7USD;51Testing软件测试网 wBt&F"j/e0M

51Testing软件测试网(A#^I0y/RMmDS

private Money f21USD;51Testing软件测试网Sq6mP"`1o,u&Gyg

51Testing软件测试网_ h6]t\$[an

\6~x5C~OB051Testing软件测试网1J&U$yH5_$q

private IMoney fMB1;

K;km#f_JeR_0

[H{G NU:?7\m0private IMoney fMB2;51Testing软件测试网sQb {*Rbe

51Testing软件测试网$|-Ip/`u~2QB1kR r

51Testing软件测试网5B-x]/o^t3XD

9P6g`L}6[_*xCK0public static void main(String args[]) {51Testing软件测试网u`G ^U*Y2_KJ

51Testing软件测试网d0X}`fT

junit.textui.TestRunner.run(MoneyTest.class);

4H;`ty*i9W"t$p.W(qi0

+j*V2UOxS3w"qQ0}51Testing软件测试网R0Pw3Ny[ Y

51Testing软件测试网 PL1g#E)e{ Q#NW

protected void setUp() {

2n6yT g$M\/IcVp051Testing软件测试网N\4VKk$b5SN t

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

1BL;HTC?'aK:e3L&QeX0

!t&o d&a-y0O"J|0f14CHF= new Money(14, "CHF");51Testing软件测试网D {bZ+q3BT1] O

51Testing软件测试网h e?y6y'x

f7USD= new Money( 7, "USD");

ZpCG Zuq+M051Testing软件测试网-~'}.W:Zc

f21USD= new Money(21, "USD");

j.qj#bv0

Td"_#e&c051Testing软件测试网'Y!q9K1WzygS g

9G6^YmS6s'oV*i'H0fMB1= MoneyBag.create(f12CHF, f7USD);51Testing软件测试网[N$k&u%Cm"CI

51Testing软件测试网9S)Jnd5Z#GG2S ]

fMB2= MoneyBag.create(f14CHF, f21USD);51Testing软件测试网~2H"NPU#E

51Testing软件测试网9f?ThUQ6Z['M

}

y%r:he3@+Wd0

}-ikrY(Q.E5W0public void testBagMultiply() {

M3vsos6k"wak0

o1B n ?%Mvh;IU'e"@0// {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}

1K(L){(Zh ^#t0

cD[ JQbbp0IMoney expected= MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));

0q_6_P1}!~J051Testing软件测试网 R'HWC7SL

assertEquals(expected, fMB1.multiply(2));51Testing软件测试网0i BHozo

#]8Ia;kR0assertEquals(fMB1, fMB1.multiply(1));51Testing软件测试网 |A.T IqBP&h uUQ

51Testing软件测试网&DSH;a#P I6@

assertTrue(fMB1.multiply(0).isZero());51Testing软件测试网y*B&M mDcLG7rz

Pr:a~a`I0}

-oBA[$q a0

A BW$p4nLZq@P4Y0public void testBagNegate() {51Testing软件测试网h$Z(i7No^6W8L'v

51Testing软件测试网qjX2N-PxJ

// {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}51Testing软件测试网e0s-t!Zwykg

51Testing软件测试网0ZZ*J9ZhQo

IMoney expected= MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));51Testing软件测试网}ao$D5CrFe

[ vI$W6nD)WW,u_1I0assertEquals(expected, fMB1.negate());51Testing软件测试网;y!^#@l#K

nG+A? U _)y%K2Ds0}

`O5h}&k4x"V051Testing软件测试网r e$W$\i

public void testBagSimpleAdd() {51Testing软件测试网#rZ ql/q {l ~LY

$C.gIw{_'G0// {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}

9o?lKaL)N*^o6K051Testing软件测试网 aa.f~)z

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

R!?I-_E`"M1dI051Testing软件测试网N | ~6m }

assertEquals(expected, fMB1.add(f14CHF));51Testing软件测试网U0e2}I ~:P9t kK

Aw(~)J~"o)DA*a8X8a0}

qD7LCrQ051Testing软件测试网y.Q&n?Ao

public void testBagSubtract() {51Testing软件测试网GI@K B R&z r5{

/FKI'mq Qzr0// {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}

2S Dh#Q3] W!Z8o*I0

\g)E]Ld[M n0IMoney expected= MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));51Testing软件测试网7s M*R7NB$n*f gI

L8a U.[LQ w&b0assertEquals(expected, fMB1.subtract(fMB2));

}M&C.So i'Q.FSx_0

+oBFA ~Q?FO0}

.Poz_Y B5Q4i0

"|CO,JP0public void testBagSumAdd() {51Testing软件测试网6in5p6IwJ)] Y r7BK

;_bMd};~j#@ r0// {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}

Zz$O6q9e1G0

7D;[gM8o7sHM0IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));

c kPG;UL]-W051Testing软件测试网&IR;@%@2q

assertEquals(expected, fMB1.add(fMB2));51Testing软件测试网H.o5Cr(p'x,} b

/g E&}1|a,A0}

^+u9](JCI5v"i0

)x1R1Y S5K)D0public void testIsZero() {

x _+Z:y*@\051Testing软件测试网-Wf%c)^,M n a%cgW1^7G

assertTrue(fMB1.subtract(fMB1).isZero());51Testing软件测试网&@"G*w+TWcfa0qm

1_r"y-Ij:^0assertTrue(MoneyBag.create(new Money (0, "CHF"), new Money (0, "USD")).isZero());51Testing软件测试网 xgVE~J$UZu

51Testing软件测试网}K,C,f.T/xy

}51Testing软件测试网c/BhW3d

d)vn/NeFr!@0public void testMixedSimpleAdd() {51Testing软件测试网lnp(Q*u.E Z

3t$A#FDY0// [12 CHF] + [7 USD] == {[12 CHF][7 USD]}

E#v o r[Yt0

la!oRP]7eMx0IMoney expected= MoneyBag.create(f12CHF, f7USD);

|.q0r_5o051Testing软件测试网9uy;H#j6Z#wXe

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

bi|b7e u uC051Testing软件测试网3w1ZT%g A5X9t(f

}

9tWj,q^B;|051Testing软件测试网#B^0VZ1Q P

public void testBagNotEquals() {51Testing软件测试网XpgYMP-S*A6^

51Testing软件测试网,I7W?4DP~W

IMoney bag= MoneyBag.create(f12CHF, f7USD);51Testing软件测试网 |R8q;P/^0J]u

_,`Ip cp\am0assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));

x0m| {a051Testing软件测试网uK#Ej:c,x){{s{'m&y

}51Testing软件测试网oi5`C'n/i

F(M/fKZ[PG0public void testMoneyBagEquals() {51Testing软件测试网Z W n3R3?6q J] C0UlfK

pfshy[Cf j0assertTrue(!fMB1.equals(null));

;]5Imu}*kK\&[H6L0

0u%|_5u;}%O;x u0

.b!sA|#Vg0

Fz P"vu'~D0assertEquals(fMB1, fMB1);

0eV.c"RO'N5Uo051Testing软件测试网1yVeeyT

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

{1J!kuA%U;T'ZP#w0

#Pd'Y/WK&EZ0assertTrue(fMB1.equals(equal));51Testing软件测试网8c#qm-}{$[mO1C%e

oUCvfv|G0Meg0assertTrue(!fMB1.equals(f12CHF));51Testing软件测试网5sI'F(i&q2jvT

51Testing软件测试网;X!J!y3i6b,D

assertTrue(!f12CHF.equals(fMB1));51Testing软件测试网}O^/FTj

51Testing软件测试网*tH$meAJ1H/e

assertTrue(!fMB1.equals(fMB2));51Testing软件测试网)r Fz xC"vv JPv

b,F6c&w)T iZ Rx#?0}51Testing软件测试网e/_'H~?ORs }i

ip f v[0public void testMoneyBagHash() {51Testing软件测试网2d-l/V5o*T/{Qp

9C0mB.ZM/E0IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));51Testing软件测试网,pdc;Q$f r(c/V*Ai

51Testing软件测试网6F!yu? Wzso

assertEquals(fMB1.hashCode(), equal.hashCode());51Testing软件测试网+n ok?M OQ p3@d

l|#~:Qg/j9x0}51Testing软件测试网N0E[Q2F'l)a

51Testing软件测试网Hn1Om{jl[

public void testMoneyEquals() {51Testing软件测试网s$uH)F-^p

51Testing软件测试网xw:n9ix7K

assertTrue(!f12CHF.equals(null));51Testing软件测试网VA'^ @cb3^6k'N1O

&ga,N6}9{?sQ0Money equalMoney= new Money(12, "CHF");51Testing软件测试网%p,I7F3zvJ_(G}Q9A

51Testing软件测试网 C,sOp ? U h8U I7D

assertEquals(f12CHF, f12CHF);

$`J%s0pWs)TKY n051Testing软件测试网DjcZ)eI+\#T

assertEquals(f12CHF, equalMoney);51Testing软件测试网Q@Z hSpu \

#WEQ1H,b)B4}[I0assertEquals(f12CHF.hashCode(), equalMoney.hashCode());51Testing软件测试网!hZR.QK:@'A

h1s$_X W-I0assertTrue(!f12CHF.equals(f14CHF));

'|JLW U?c&Y051Testing软件测试网yn5DY6e ^/[

}

6b0hi(t.A~0

|lm*hO0public void testMoneyHash() {

^ i3n^4Gw&CG*_0

hvbJS{T0assertTrue(!f12CHF.equals(null));51Testing软件测试网&u8ch J,jh7x

| E!{/T1q4c c z0Money equal= new Money(12, "CHF");

q5^A-y2L0

Y Q*WcL&x!qL+N\B0assertEquals(f12CHF.hashCode(), equal.hashCode());

'O"A$M4k:Y~0O/m0

V3v,_6z]5t0}51Testing软件测试网y%F/j6}-O&~ I

P&p&OWBI3~E0public void testSimplify() {51Testing软件测试网 iNUi-l%I:Ca}3Z

51Testing软件测试网*YRk2q"B@#xi+j

IMoney money= MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));51Testing软件测试网:^OR2Q([q p FS

gU_IQu$o0assertEquals(new Money(54, "CHF"), money);

Nv|!|uJ0

2K6V%_3r.{3o#L[0}51Testing软件测试网 U9{sU;E e

51Testing软件测试网LT$h6{ r-a-A

public void testNormalize2() {51Testing软件测试网?9j%OJGh}(N

51Testing软件测试网M~eb8p8zU

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

HD`g4_6`2h0

'n!F!C\'\N|0Money expected= new Money(7, "USD");51Testing软件测试网jAJ'd%~_5q

_(G j,{8~W%m5ko0assertEquals(expected, fMB1.subtract(f12CHF));

T(d `+E!x$M:Y051Testing软件测试网!XyRREw X l-h

}

je7Gm.e x5L!F051Testing软件测试网#mDY5C9S

public void testNormalize3() {

4s z qH Cy+oU~)e"O T0

s8A0@|{.eUA{ qVZ0// {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]

"]'D q`.j'sI:fx,D051Testing软件测试网Z\ T2t Od g

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

c [(N6I6Dh D|;m(\051Testing软件测试网%n\p"yBhK

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

6t!b A6D2BP:]B051Testing软件测试网Mc-p-u1W`/`

assertEquals(expected, fMB1.subtract(ms1));51Testing软件测试网pO?X.Q

+R9}ML)z!O&Z P(l:W0}51Testing软件测试网9{RR&y8C,K/j RS6gX`

51Testing软件测试网$Z(s'? T/T)v/qAGLY-R

public void testNormalize4() {51Testing软件测试网F ioA ^*k~ w(M1X

3B];T G$p.z{(cu8N Z0// [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]51Testing软件测试网cD s"[3D,h gS;K

eb2@R$z0IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));

UfL-N%F051Testing软件测试网8f#oq6x A,gl\

Money expected= new Money(-3, "USD");51Testing软件测试网:Uz!Z5]N

51Testing软件测试网?2qAC3}q Ny-O ?

assertEquals(expected, f12CHF.subtract(ms1));51Testing软件测试网!Xd(M;u s\6_'|

51Testing软件测试网#}&Yhjk4R)X$w2`

}

bp&jq |~'c1z051Testing软件测试网N$Kv wW Dx*G

public void testPrint() {

Wq9aY{V0

-u{@e#h6Is M%E2H0assertEquals("[12 CHF]", f12CHF.toString());51Testing软件测试网/zcS'n)K

51Testing软件测试网AC%I+g!Npo

}51Testing软件测试网}L U gL

51Testing软件测试网 M;@onj,a

public void testSimpleAdd() {

I)A }7B*\0

1g|(v#\(Hc W0// [12 CHF] + [14 CHF] == [26 CHF]51Testing软件测试网x"Wz$ZG

51Testing软件测试网f;t1\)[,zLZ@-k

Money expected= new Money(26, "CHF");

QX{BI3sb\051Testing软件测试网7~mG)}5v#\ q s9@

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

7T GZG1G*M3D&?jn8\!R0

/H;S!Sn5W8_*ts"B(B0}

eV z.E6W5jijM051Testing软件测试网F0@Q_ M5b7U/`9|

public void testSimpleBagAdd() {51Testing软件测试网C Fen2kQ)` {xq

51Testing软件测试网;rx#j[ Tl,U}6\eM

// [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}51Testing软件测试网v&ij,x;DP[H

!w:Db FXe0IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));

s V0^U|%]D051Testing软件测试网8i/zH"A(jD({!i+iN+R

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

:Q&T(vH*g0g/B4rt,v0

R7x}(FZ,G^"r0}

%J4zpD.niXv0

2aO*Wcyc2HY0public void testSimpleMultiply() {

8y;mZZz;R051Testing软件测试网#y;g9E;h P

// [14 CHF] *2 == [28 CHF]51Testing软件测试网5E!r])a/w-pe;] T

QM!B'uw?4E0Money expected= new Money(28, "CHF");51Testing软件测试网&Xj-_0\"n(STL

!EORb L aln\0assertEquals(expected, f14CHF.multiply(2));51Testing软件测试网6u2Ma,YC@L9yM

3V.g[ ^$Ci0}

+ok Q6g1f+rU |x0

M4v$k ns9W5^n)N _"I0public void testSimpleNegate() {51Testing软件测试网A}C`J'R

dC8j!i@8^/j0// [14 CHF] negate == [-14 CHF]51Testing软件测试网&^2I+xg{G jH/j

]3| |3b!}s(RK~['wH0Money expected= new Money(-14, "CHF");51Testing软件测试网'wi^ Rtj#M

51Testing软件测试网9UxJ/D"K

assertEquals(expected, f14CHF.negate());51Testing软件测试网8F kw8x,^,X

51Testing软件测试网5E&^&K rx+y)i

}51Testing软件测试网T;Z`v+n_

;A&NqD}.hP0public void testSimpleSubtract() {51Testing软件测试网Sw:J5nb

a4H br"zF5B0// [14 CHF] - [12 CHF] == [2 CHF]

kXE"j I%QV$~0

A} t;Q0I^0Money expected= new Money(2, "CHF");

-h D5BV_ dM0

*w^*_*V%[g$W2[L0assertEquals(expected, f14CHF.subtract(f12CHF));51Testing软件测试网\SL*f\!C

51Testing软件测试网 ]'od$[0H%e,D

}51Testing软件测试网D}Ux |a;ce

51Testing软件测试网 n(kT/E5X'dC(Cc

}

9jBF|z6`],CQ0

FQ4Y}kWW-u0二、编写ant文件自动运行java单元测试

4Wr/A;aI0

g.S#q1L2uK&a'|V0

{[ q6n&n3M't,g0

b!O(VI+_D4f }0之后,我们在sincky目录下,创建一个build.xml文件,完成它的编译和测试任务,这里我为build.xml文件加了注释,供大家参考:

&E8~ZA`$K-V zS)M051Testing软件测试网] JlQnho

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

:iR\,gTu051Testing软件测试网h#x!U;[ pG4eXh

51Testing软件测试网)k(H7?0Q(Z2U2]m

51Testing软件测试网%XE,B7i'ncC

Cj| U,|&|N k051Testing软件测试网cd{\5_%k

moneytest build file51Testing软件测试网 qs4[ l2Ne

4m"].q!jr9U!C+u0

3Ow0hKL4L*p051Testing软件测试网_|m)j6Z:l{ {e

定义一个属性src,指向src目录-->51Testing软件测试网+p)Z3y!hu

+U`y}|j b6X}*gZ:Q051Testing软件测试网^4mhK(NPq

51Testing软件测试网bn%xu-MNl

定义一个属性build,指向build目录,这个目录放置所有的编译后class文件,该目录目前没有创建-->

c-p]I_ a0

} FMLh(N4w9n|051Testing软件测试网Dz4En(?"e:g$P:~$F7J)Wy

51Testing软件测试网N;do&M7P C&Nx

定义一个buildclasspath,里边放置后边任务里需要的依赖库和依赖路径-->51Testing软件测试网w u S7EiK

51Testing软件测试网1tL T1?%} `?[j

51Testing软件测试网X"{W-Db+uD g#Fz

51Testing软件测试网vxK ~%D2PTJ;_;x

51Testing软件测试网VzZE!_5ql,T

,rB3G}&cQ0

(BAT @.EgX051Testing软件测试网hL&@ H;yCM

51Testing软件测试网[lp^SC+n+F Z

51Testing软件测试网;`0MU4x \:zi

51Testing软件测试网LafcwM/_"KlBI

$wEX,w,}Q/@%Y7N!K0

sE+f5b)\:VP;Us051Testing软件测试网m'm C _L#Hn1_

51Testing软件测试网 ~[([X0c0pG6|

51Testing软件测试网 a*KD5})}x

51Testing软件测试网+B }}s8_

8K(k"bd.N051Testing软件测试网~/A4B5pN,f%G2vX'w

J8^(Kz$c!]$L@0

A'\,Qi v(u051Testing软件测试网K G!Z#eZ)}"_C;vR

51Testing软件测试网3[ MqD'~'\ s,mD:h\

tR7D&wqXX0fork="yes">

K\sn4eLj0

M O:Al!X2vR`051Testing软件测试网k h$PP pV&e

51Testing软件测试网J/]-s1}&jIr

6@)Z2zSt%X&h;}0

"zy&N;Y5Gsb(Hr0

7Lq!xQU9~9a0

vb J*h g5O0

-n4k)Uw/M,rs051Testing软件测试网~.Z pYFo

51Testing软件测试网9WQ:Qk%V,NT}-a@

51Testing软件测试网,J ~}&t(q

51Testing软件测试网QM%w ^_x6i|H%g+U

x6vc*rkz,L3n K051Testing软件测试网 u&Xg1S2e6A'md#{

vH u-b:M_pW(]0

&xk#qn L'Pl;A7O051Testing软件测试网 Q|FDW5DC0`(VR-|

之后,我们开始运行build文件,开始编译任务:打开cmd命令行,进入sincky文件夹下,执行ant命令,会看见类似下列内容的效果:51Testing软件测试网,b UN\ _|

51Testing软件测试网 Ym"OV2X

C:cloversincky>ant51Testing软件测试网*?s,dx.N"MQ

5?#dDXt O0Buildfile: build.xml

1ttH~U4r051Testing软件测试网4}d,_E3bC9~-N4H,f

compile:

p}0e}G0

}n]!_ Em?,a&u0[mkdir] Created dir: C:cloversinckybuild

E'N f^} B1|pG051Testing软件测试网X#A2ue3@8jyE

[javac] Compiling 4 source files to C:cloversinckybuild51Testing软件测试网*R"Wf&n~aV

P8f`.\ BQZ0BUILD SUCCESSFUL51Testing软件测试网&T4mCh6|G;T/w

9V,w+t$gL&A%Sl0Total time: 4 seconds

Cl TVKi0

7g FeF H7i(|s @0现在你会在sincky目录下发现多了一个build目录,进入build目录,看见里边编译好的4class文件,恭喜你,这个任务胜利完成!51Testing软件测试网,F^~rd4C Z

6A8Q-R X&eV0下面我们来运行单元测试任务:51Testing软件测试网gl{ ptf

%c%OX3t I a0C:cloversincky>ant test

T#s5l }B4bB ed,}0

vMi'_$E7s0Buildfile: build.xml

Fs s7D$yi(?0

.t-X0pL_U0test:51Testing软件测试网,S }eM O'Jt'u|

51Testing软件测试网P6mk:ub7ROJ

[java] ......................51Testing软件测试网W(v*M%{ j.{,E

51Testing软件测试网R'S4?HK*G3Qi"{ v

[java] Time: 0.01651Testing软件测试网v*e!Z/[)b|

6s8KR-P)y*R)Fo0[java] OK (22 tests)51Testing软件测试网#DF;}$Vo ^5ofeh&y

)M+}{7d8FmEg0BUILD SUCCESSFUL51Testing软件测试网+U![BN{b!z CeU

kFf$G'zV0Total time: 1 second

5`5X5s%FMxHT0

4l%W{:Sy{0可以通过结果看出,22个测试用例全部通过;junit里边测试通过是.表示,测试失败是.F表示。关于ant的命令帮助,你可以输入ant –h查看。

? D8x:T5Gu0

;a4~td [ ~/c1c W"?M0

7M!j E]o0

TAG:

 

评分:0

我来说两句

日历

« 2024-05-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

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

RSS订阅

Open Toolbar