##### Coverage Report - org.seasar.cubby.plugins.s2.unit.CubbyTestCase

Classes in this File | Line Coverage | Branch Coverage | Complexity
CubbyTestCase |
5% | 1/17
N/A | N/A
| 1.4;1.4

1 |  |
     /*
2 |  |
      * Copyright 2004-2009 the Seasar Foundation and the Others.
3 |  |
      *
4 |  |
      * Licensed under the Apache License, Version 2.0 (the "License");
5 |  |
      * you may not use this file except in compliance with the License.
6 |  |
      * You may obtain a copy of the License at
7 |  |
      *
8 |  |
      *     http://www.apache.org/licenses/LICENSE-2.0
9 |  |
      *
10 |  |
      * Unless required by applicable law or agreed to in writing, software
11 |  |
      * distributed under the License is distributed on an "AS IS" BASIS,
12 |  |
      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13 |  |
      * either express or implied. See the License for the specific language
14 |  |
      * governing permissions and limitations under the License.
15 |  |
      */
16 |  |
     package org.seasar.cubby.plugins.s2.unit;
17 |  |
18 |  |
     import java.lang.reflect.Field;
19 |  |
20 |  |
     import javax.servlet.http.HttpServletRequest;
21 |  |
     import javax.servlet.http.HttpServletResponse;
22 |  |
23 |  |
     import org.seasar.cubby.action.ActionResult;
24 |  |
     import org.seasar.cubby.unit.CubbyAssert;
25 |  |
     import org.seasar.cubby.unit.CubbyRunner;
26 |  |
     import org.seasar.framework.mock.servlet.MockHttpServletRequest;
27 |  |
     import org.seasar.framework.mock.servlet.MockHttpServletResponse;
28 |  |
     import org.seasar.framework.unit.S2TigerTestCase;
29 |  |
30 |  |
     /**
31 |  |
      * CubbyのActionクラスの単体テスト用のクラスです。
32 |  |
      * <p>
33 |  |
      * このクラスを継承して、それぞれのActionクラス用の単体テストを作成します。詳細はドキュメントの「アクションのテスト」を参照下さい。
34 |  |
      *
35 |  |
      * <pre>
36 |  |
      * public class HelloActionTest extends CubbyTestCase {
37 |  |
      *         // 対象のアクション
38 |  |
      *         private HelloAction action;
39 |  |
      *
40 |  |
      *         // 初期化処理
41 |  |
      *         protected void setUp() throws Exception {
42 |  |
      *                 // diconファイルの読み込み
43 |  |
      *                 include(&quot;app.dicon&quot;);
44 |  |
      *         }
45 |  |
      *
46 |  |
      *         public void testIndex() throws Exception {
47 |  |
      *                 // アクションの実行
48 |  |
      *                 ActionResult result = processAction(&quot;/hello/&quot;);
49 |  |
      *                 // 結果のチェック
50 |  |
      *                 assertPathEquals(Forward.class, &quot;input.jsp&quot;, result);
51 |  |
      *         }
52 |  |
      *
53 |  |
      *         public void setUpMessage() {
54 |  |
      *                 // リクエストパラメータのセット
55 |  |
      *                 getRequest().addParameter(&quot;name&quot;, &quot;name1&quot;);
56 |  |
      *         }
57 |  |
      *
58 |  |
      *         public void testMessage() throws Exception {
59 |  |
      *                 // アクションの実行
60 |  |
      *                 ActionResult result = processAction(&quot;/hello/message&quot;);
61 |  |
      *                 // 結果のチェック
62 |  |
      *                 assertPathEquals(Forward.class, &quot;result.jsp&quot;, result);
63 |  |
      *                 // 実行後のアクションの状態を確認
64 |  |
      *                 assertEquals(&quot;name1&quot;, action.name);
65 |  |
      *         }
66 |  |
      * }
67 |  |
      * </pre>
68 |  |
      *
69 |  |
      * <pre>
70 |  |
      * public class TodoActionTest extends CubbyTestCase {
71 |  |
      *
72 |  |
      *         private TodoAction action;
73 |  |
      *
74 |  |
      *         public void setUpShow() throws Exception {
75 |  |
      *                 emulateLogin();
76 |  |
      *         }
77 |  |
      *
78 |  |
      *         private void emulateLogin() throws Exception {
79 |  |
      *                 User user = new User();
80 |  |
      *                 user.setId(&quot;mock&quot;);
81 |  |
      *                 user.setName(&quot;mock&quot;);
82 |  |
      *                 user.setPassword(&quot;mock&quot;);
83 |  |
      *                 getRequest().getSession().setAttribute(&quot;user&quot;, user);
84 |  |
      *         }
85 |  |
      *
86 |  |
      *         public void testShow() throws Exception {
87 |  |
      *                 this.readXlsAllReplaceDb(&quot;TodoActionTest_PREPARE.xls&quot;);
88 |  |
      *                 // CoolURIの場合のテスト
89 |  |
      *                 ActionResult result = processAction(&quot;/todo/1&quot;);
90 |  |
      *                 assertPathEquals(Forward.class, &quot;show.jsp&quot;, result);
91 |  |
      *                 assertEquals(new Integer(1), action.id);
92 |  |
      *                 assertEquals(&quot;todo1&quot;, action.text);
93 |  |
      *                 assertEquals(&quot;todo1 memo&quot;, action.memo);
94 |  |
      *                 assertEquals(new Integer(1), action.todoType.getId());
95 |  |
      *                 assertEquals(&quot;type1&quot;, action.todoType.getName());
96 |  |
      *                 assertEquals(&quot;2008-01-01&quot;, action.limitDate);
97 |  |
      *         }
98 |  |
      * }
99 |  |
      * </pre>
100 |  |
      *
101 |  |
      * </p>
102 |  |
      *
103 |  |
      * @author agata
104 |  |
      * @author baba
105 |  |
      */
106 | 1 |
     public abstract class CubbyTestCase extends S2TigerTestCase {
107 |  |
108 |  |
             /**
109 |  |
              * ActionResultの型とパスをチェックします。
110 |  |
              *
111 |  |
              * @param resultClass
112 |  |
              *            ActionResultの型
113 |  |
              * @param expectedPath
114 |  |
              *            期待されるパス
115 |  |
              * @param actualResult
116 |  |
              *            チェックするActionResult
117 |  |
              */
118 |  |
             public static void assertPathEquals(
119 |  |
                             final Class<? extends ActionResult> resultClass,
120 |  |
                             final String expectedPath, final ActionResult actualResult) {
121 | 0 |
                     CubbyAssert.assertPathEquals(resultClass, expectedPath, actualResult);
122 | 0 |
             }
123 |  |
124 |  |
             /**
125 |  |
              * ActionResultの型とパスをチェックします。
126 |  |
              *
127 |  |
              * @param resultClass
128 |  |
              *            ActionResultの型
129 |  |
              * @param expectedPath
130 |  |
              *            期待されるパス
131 |  |
              * @param actualResult
132 |  |
              *            チェックするActionResult
133 |  |
              * @param characterEncoding
134 |  |
              *            URI のエンコーディング
135 |  |
              */
136 |  |
             public static void assertPathEquals(
137 |  |
                             final Class<? extends ActionResult> resultClass,
138 |  |
                             final String expectedPath, final ActionResult actualResult,
139 |  |
                             final String characterEncoding) {
140 | 0 |
                     CubbyAssert.assertPathEquals(resultClass, expectedPath, actualResult,
141 |  |
                                     characterEncoding);
142 | 0 |
             }
143 |  |
144 |  |
             /**
145 |  |
              * アクションメソッドを実行します。
146 |  |
              *
147 |  |
              * @param originalPath
148 |  |
              *            オリジナルパス
149 |  |
              * @return アクションメソッドの実行結果。アクションメソッドが見つからなかったり結果がない場合は <code>null</code>
150 |  |
              * @throws Exception
151 |  |
              *             アクションメソッドの実行時に例外が発生した場合
152 |  |
              */
153 |  |
             protected ActionResult processAction(final String originalPath)
154 |  |
                             throws Exception {
155 | 0 |
                     final MockHttpServletRequest request = getRequest();
156 | 0 |
                     setServletPath(request, originalPath);
157 | 0 |
                     final MockHttpServletResponse response = getResponse();
158 | 0 |
                     return processAction(request, response);
159 |  |
             }
160 |  |
161 |  |
             /**
162 |  |
              * 指定されたモックリクエストのサーブレットパスを設定します。
163 |  |
              *
164 |  |
              * @param request
165 |  |
              *            リクエスト
166 |  |
              * @param servletPath
167 |  |
              *            サーブレットパス
168 |  |
              */
169 |  |
             private static void setServletPath(final MockHttpServletRequest request,
170 |  |
                             final String servletPath) {
171 |  |
                     try {
172 | 0 |
                             final Field servletPathField = request.getClass().getDeclaredField(
173 |  |
                                             "servletPath");
174 | 0 |
                             servletPathField.setAccessible(true);
175 | 0 |
                             servletPathField.set(request, servletPath);
176 | 0 |
                     } catch (final Exception ex) {
177 | 0 |
                             throw new IllegalStateException(ex);
178 | 0 |
                     }
179 | 0 |
             }
180 |  |
181 |  |
             /**
182 |  |
              * アクションメソッドを実行します。
183 |  |
              *
184 |  |
              * @param request
185 |  |
              *            要求
186 |  |
              * @param response
187 |  |
              *            応答
188 |  |
              * @return アクションメソッドの実行結果。アクションメソッドが見つからなかったり結果がない場合は <code>null</code>
189 |  |
              * @throws Exception
190 |  |
              *             アクションメソッドの実行時に例外が発生した場合
191 |  |
              */
192 |  |
             protected ActionResult processAction(final HttpServletRequest request,
193 |  |
                             final HttpServletResponse response) throws Exception {
194 | 0 |
                     return CubbyRunner.processAction(request, response);
195 |  |
             }
196 |  |
197 |  |
     }