SpringMVC单元测试之MockMVC 模拟登入用户
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录(?)
[-]
1. pomxml
2. controller层
3. 单元测试类版权声明:本文为博主原创文章,转载请附明出处。
今天介绍一下springMVC的单元测试,可以参考spring 官方文档进行
前提准备,springmvc的demo工程,这里就不做叙述了
pom.xml
controller层
[html]
01.
<d e p e n d e n c y > 02.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 03.
<a r t i f a c t I d >s p r
i n g -c o r e </a r t i f a c t I d > 04.
</d e p e n d e n c y > 05.
<d e p e n d e n c y > 06.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 07.
<a r t i f a c t I d >s p r i n g -b e a n s </a r t i f a c t I d > 08.
</d e p e n d e n c y > 09.
<d e p e n d e n c y > 10.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 11.
<a r t i f a c t I d >s p r i n g -c o n t e x t </a r t i f a c t I d > 12.
</d e p e n d e n c y > 13.
<d e p e n d e n c y > 14.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 15.
<a r t i f a c t I d >s p r i n g -c o n t e x t -s u p p o r t </a r t i f a c t I d > 16.
</d e p e n d e n c y > 17.
<d e p e n d e n c y > 18.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 19.
<a r t i f a c t I d >s p r i n g -w e b </a r t i f a c t I d > 20.
</d e p e n d e n c y > 21.
<d e p e n d e n c y > 22.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 23.
<a r t i f a c t I d >s p r i n g -w e b m v c </a r t i f a c t I d > 24.
</d e p e n d e n c y > 25.
<d e p e n d e n c y > 26.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 27.
<a r t i f a c t I d >s p r i n g -o r m </a r t i f a c t I d > 28.
</d e p e n d e n c y > 29.
<d e p e n d e n c y > 30.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 31.
<a r t i f a c t I d >s p r i n g -t x </a r t i f a c t I d > 32.
</d e p e n d e n c y > 33.
<d e p e n d e n c y > 34.
<g r o u p I d >o r g .s p r i n g f r a m e w o r k </g r o u p I d > 35.
<a r t i f a c t I d >s p r i n g -t e s t </a r t i f a c t I d > 36.
</d e p e n d e n c y > 37.
<d e p e n d e n c y > 38.
<g r o u p I d >j u n i t </g r o u p I d > 39.
<a r t i f a c t I d >j u n i t </a r t i f a c t I d > 40. </d e p e n d e n c y >
[java]
01. p a c k a g e c o n t r o l l e r ;
02.
03. i m p o r t j a v a x .s e r v l e t .h t t p .H t t p S e s s i o n ;
04.
05.i m p o r t o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.a n n o t a t i o n.A u t o w i r e d;
06.i m p o r t o r g.s p r i n g f r a m e w o r k.w e b.b i n d.a n n o t a t i o n.P a t h V a r i a b l e;
07.i m p o r t o r g.s p r i n g f r a m e w o r k.w e b.b i n d.a n n o t a t i o n.R e q u e s t M a p p i n g;
08.i m p o r t o r g.s p r i n g f r a m e w o r k.w e b.b i n d.a n n o t a t i o n.R e q u e s t M e t h o d;
09.i m p o r t o r g.s p r i n g f r a m e w o r k.w e b.b i n d.a n n o t a t i o n.R e q u e s t P a r a m;
10.i m p o r t o r g.s p r i n g f r a m e w o r k.w e b.b i n d.a n n o t a t i o n.R e s t C o n t r o l l e r;
11.
12.i m p o r t s e r v i c e.U s e r S e r v i c e;
13.i m p o r t d o m a i n.U s e r;
14.
15./**
16.*U s e r C o n t r o l l e r.
17.*@a u t h o r L e o n L e e
18.*/
19.@R e s t C o n t r o l l e r
20.@R e q u e s t M a p p i n g(v a l u e="u s e r")
21.p u b l i c c l a s s U s e r C o n t r o l l e r{
22.
23./**
24.*U s e r S e r v i c e i n t e r f a c e.
25.*/
26.@A u t o w i r e d
27.p r i v a t e U s e r S e r v i c e u s e r S e r v i c e;
28.
29./**
30.*G e t u s e r M S G.
31.*@p a r a m u s e r I d
32.*@r e t u r n u s e r M s g
33.*/
34.@R e q u e s t M a p p i n g(v a l u e="u s e r M s g/{u s e r I d}",m e t h o d=R e q u e s t M e t h o d.G E T)
35.p u b l i c U s e r g e t U s e r M s g(@P a t h V a r i a b l e(v a l u e="u s e r I d")S t r i n g u s e r I d){
36.r e t u r n u s e r S e r v i c e.g e t U s e r M s g(u s e r I d);
37.}
38.
39./**
40.*U p d a t e u s e r M S G.
41.*@p a r a m u s e r I d
42.*@p a r a m u s e r N a m e
43.*@r e t u r n u p d a t e d u s e r M S G
44.*/
45.@R e q u e s t M a p p i n g(v a l u e="u s e r M s g/{u s e r I d}",m e t h o d=R e q u e s t M e t h o d.P U T)
46.p u b l i c U s e r p u t U s e r M s g(@P a t h V a r i a b l e(v a l u e="u s e r I d")S t r i n g u s e r I d,@R e q u e s t P a r a m S t r i n g u s e r N a m e,H t t p S e s s i o n s e s s i o n)
{
47.i f(n u l l==(S t r i n g)s e s s i o n.g e t A t t r i b u t e("l o g i n U s e r"))
48.r e t u r n n e w U s e r();
49.S y s t e m.o u t.p r i n t l n((S t r i n g)s e s s i o n.g e t A t t r i b u t e("l o g i n U s e r"));
50.r e t u r n u s e r S e r v i c e.p u t U s e r M s g(u s e r I d,u s e r N a m e);
51.}
52.
53./**
54.*D e l e t e u s e r.
55.*@p a r a m u s e r I d
56.*@r e t u r n d e l e t e d u s e r M S G
57.*/
58.@R e q u e s t M a p p i n g(v a l u e="u s e r M s g/{u s e r I d}",m e t h o d=R e q u e s t M e t h o d.D E L E T E)
59.p u b l i c U s e r d e l U s e r M s g(@P a t h V a r i a b l e(v a l u e="u s e r I d")S t r i n g u s e r I d){
60.r e t u r n u s e r S e r v i c e.d e l U s e r M s g(u s e r I d);
61.}
62.
63./**
64.*A d d u s e r.
65.*@p a r a m u s e r N a m e
66.*@r e t u r n a d d e d u s e r M S G
67.*/
68.@R e q u e s t M a p p i n g(v a l u e="u s e r M s g",m e t h o d=R e q u e s t M e t h o d.P O S T)
69.p u b l i c U s e r p o s t U s e r M s g(@R e q u e s t P a r a m S t r i n g u s e r N a m e){
70.r e t u r n u s e r S e r v i c e.p o s t U s e r M s g(u s e r N a m e);
71.}
72.
73./**
74.*l o g i n U s e r.N o t e t h a t d o n o t s e n d p a s s w o r d a s u r l.
单元测试类
这里的静态导入比较重要,有时候没办法自动导入的
就是下面的 import static xxx.*
另一点,
代表的是加载的配置文件,可以根据需要进行添加75. * @p a r a m u s e r I d
76. * @p a r a m p a s s w o r d
77. * @r e t u r n
78.
*/ 79.
@R e q u e s t M a p p i n g (v a l u e = "u s e r M s g /
{u s e r I d }/{p a s s w o r d }", m e t h o d = R e q u e s t M e t h o d .G E T ) 80.
p u b l i c b o o l e a n l o g i n U s e r (@P a t h V a r i a b l e S t r i n g u s e r I d , @P a t h V a r i a b l e S t r i n g p a s s w o r d , H t t p S e s s i o n s e s s i o n ){ 81.
i f ("l o g i n U s e r ".e q u a l s (u s e r I d )&&"l o g i n U s e r ".e q u a l s (p a s s w o r d )){ 82.
s e s s i o n .s e t A t t r i b u t e ("l o g i n U s e r ", u s e r I d ); 83.
r e t u r n t r u e ; 84.
} 85. r e t u r n f a l s e ;
86. }
87. }
[java]
01. @C o n t e x t C o n f i g u r a t i o n (l o c a t i o n s = {"c l a s s p a t h :a p p l i c a t i o n C o n t e x t .x m l ","c l a s s p a t h :a p p l i c a t i o n C o n t e x t .m v c .x m l "})
[java]
01.
p a c k a g e c o n t r o l l e r .t e s t ; 02.
03.
i m p o r t s t a t i c o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .s e t u p .M o c k M v c B u i l d e r s .*; 04.
i m p o r t s t a t i c o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .r e q u e s t .M o c k M v c R e q u e s t B u i l d e r s .*; 05.
i m p o r t s t a t i c o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .r e s u l t .M o c k M v c R e s u l t H a n d l e r s .*; 06.
i m p o r t s t a t i c o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .r e s u l t .M o c k M v c R e s u l t M a t c h e r s .*; 07.
08.
i m p o r t j a v a x .s e r v l e t .h t t p .H t t p S e s s i o n ; 09.
10.
i m p o r t o r g .j u n i t .B e f o r e ; 11.
i m p o r t o r g .j u n i t .T e s t ; 12.
i m p o r t o r g .j u n i t .r u n n e r .R u n W i t h ; 13.
i m p o r t o r g .s p r i n g f r a m e w o r k .b e a n s .f a c t o r y .a n n o t a t i o n .A u t o w i r e d ; 14.
i m p o r t o r g .s p r i n g f r a m e w o r k .h t t p .M e d i a T y p e ; 15.
i m p o r t o r g .s p r i n g f r a m e w o r k .m o c k .w e b .M o c k H t t p S e s s i o n ; 16.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .a n n o t a t i o n .R o l l b a c k ; 17.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .c o n t e x t .C o n t e x t C o n f i g u r a t i o n ; 18.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .c o n t e x t .j u n i t 4.S p r i n g J U n i t 4C l a s s R u n n e r ; 19.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .c o n t e x t .t r a n s a c t i o n .T r a n s a c t i o n C o n f i g u r a t i o n ; 20.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .c o n t e x t .w e b .W e b A p p C o n f i g u r a t i o n ; 21.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .M o c k M v c ; 22.
i m p o r t o r g .s p r i n g f r a m e w o r k .t e s t .w e b .s e r v l e t .M v c R e s u l t ; 23.
i m p o r t o r g .s p r i n g f r a m e w o r k .t r a n s a c t i o n .a n n o t a t i o n .T r a n s a c t i o n a l ; 24.
i m p o r t o r g .s p r i n g f r a m e w o r k .w e b .c o n t e x t .W e b A p p l i c a t i o n C o n t e x t ; 25.
26.
/** 27.
* s p r i n g m v c T e s t . 28.
* @a u t h o r L e o n L e e 29.
* @s i n c e s p r i n g -4.1.7 30.
*/ 31.
// s p r i n g 4.3 c h a n g e t o S p r i n g R u n n e r .c l a s s 32. @R u n W i t h (S p r i n g J U n i t 4C l a s s R u n n e r .c l a s s )
33.@W e b A p p C o n f i g u r a t i o n
34.@C o n t e x t C o n f i g u r a t i o n(l o c a t i o n s={"c l a s s p a t h:a p p l i c a t i o n C o n t e x t.x m l","c l a s s p a t h:a p p l i c a t i o n C o n t e x t.m v c.x m l"})
35.//d o r o l l b a c k
36.@T r a n s a c t i o n C o n f i g u r a t i o n(d e f a u l t R o l l b a c k=t r u e)
37.@T r a n s a c t i o n a l
38.p u b l i c c l a s s T e s t T e m p l a t e{
39.@A u t o w i r e d
40.p r i v a t e W e b A p p l i c a t i o n C o n t e x t w a c;
41.
42.p r i v a t e M o c k M v c m o c k M v c;
43.p r i v a t e M o c k H t t p S e s s i o n s e s s i o n;
44.
45.@B e f o r e
46.p u b l i c v o i d s e t u p(){
47.//i n i t a p p l i c a t i o n C o n t e x t
48.t h i s.m o c k M v c=w e b A p p C o n t e x t S e t u p(t h i s.w a c).b u i l d();
49.t h i s.s e s s i o n=n e w M o c k H t t p S e s s i o n();
50.}
51.
52.@T e s t
53.p u b l i c v o i d g e t U s e r M s g()t h r o w s E x c e p t i o n{
54.//g e t u s i n g g e t
55.t h i s.m o c k M v c
56..p e r f o r m((g e t("/u s e r/u s e r M s g/003"))
57..a c c e p t(M e d i a T y p e.p a r s e M e d i a T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8")))
58..a n d E x p e c t(s t a t u s().i s O k())
59..a n d E x p e c t(c o n t e n t().c o n t e n t T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
60..a n d D o(p r i n t());//p r i n t
61.}
62.
63.@T e s t
64.//d o n't r o l l b a c k
65.@R o l l b a c k(f a l s e)
66.p u b l i c v o i d p u t U s e r M s g()t h r o w s E x c e p t i o n{
67.//u p d a t e u s i n g p u t
68.t h i s.m o c k M v c
69..p e r f o r m((p u t("/u s e r/u s e r M s g/003"))
70..c o n t e n t T y p e(M e d i a T y p e.A P P L I C A T I O N_F O R M_U R L E N C O D E D)
71..p a r a m("u s e r N a m e","新名字03号")
72..s e s s i o n((M o c k H t t p S e s s i o n)g e t L o g i n S e s s i o n())
73..a c c e p t(M e d i a T y p e.p a r s e M e d i a T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
74.)
75..a n d E x p e c t(s t a t u s().i s O k())
76..a n d E x p e c t(c o n t e n t().c o n t e n t T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
77..a n d D o(p r i n t());//p r i n t
78.}
79.
80.@T e s t
81.p u b l i c v o i d d e l U s e r()t h r o w s E x c e p t i o n{
82.//d e l e t e u s i n g d e l e t e
83.t h i s.m o c k M v c
84..p e r f o r m((d e l e t e("/u s e r/u s e r M s g/004"))
85..a c c e p t(M e d i a T y p e.p a r s e M e d i a T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
86.)
87..a n d E x p e c t(s t a t u s().i s O k())
88..a n d E x p e c t(c o n t e n t().c o n t e n t T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
89..a n d D o(p r i n t());//p r i n t
90.}
91.
92.@T e s t
93.//d o n't r o l l b a c k
94.@R o l l b a c k(f a l s e)
95.p u b l i c v o i d p o s t U s e r()t h r o w s E x c e p t i o n{
96.//a d d u s i n g p o s t
97.t h i s.m o c k M v c
98..p e r f o r m((p o s t("/u s e r/u s e r M s g"))
99..p a r a m("u s e r N a m e","最新的用户")
100..a c c e p t(M e d i a T y p e.p a r s e M e d i a T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
101.)
102..a n d E x p e c t(s t a t u s().i s O k())
103..a n d E x p e c t(c o n t e n t().c o n t e n t T y p e("a p p l i c a t i o n/j s o n;c h a r s e t=U T F-8"))
104..a n d D o(p r i n t());//p r i n t
105.}
106.
107./**
108.*获取登入信息s e s s i o n
109.*@r e t u r n
110.*@t h r o w s E x c e p t i o n
111.*/
112.p r i v a t e H t t p S e s s i o n g e t L o g i n S e s s i o n()t h r o w s E x c e p t i o n{
113.//m o c k r e q u e s t g e t l o g i n s e s s i o n
114.//u r l=/x x x/x x x/{u s e r n a m e}/{p a s s w o r d}
115.M v c R e s u l t r e s u l t=t h i s.m o c k M v c
116..p e r f o r m((g e t("/u s e r/u s e r M s g/l o g i n U s e r/l o g i n U s e r"))) 117..a n d E x p e c t(s t a t u s().i s O k())
118..a n d R e t u r n();
119.r e t u r n r e s u l t.g e t R e q u e s t().g e t S e s s i o n();
120.}
121.}。