ユーザー登録プロセスでは、ユーザーはユーザー名とパスワードを入力し、ユーザーの基本情報とアカウント情報をデータベースに正しく登録します。
最初のステップは、テスト ケースを作成し、cmd=registerUser、userName=Yan Tao を渡し、次にサーブレットを呼び出し、最後に d:/ablog/app.html ファイルを返すことです。受け取ったユーザー名を書き込みます。最初の名前はテスト コードです:
@Test public void testRegisterUser001() { HttpServletRequest request = new HttpJunitRequest(); Map<String, String[]>params = (Map<String, String[]>)request.getParameterMap(); String[] cmd = new String [1]; cmd[0] = "registerUser"; params.put("cmd", cmd); String[] userName = new String[1]; userName[0] = "y闫涛t"; params.put("userName", userName); MainServlet m = new MainServlet(); HttpServletResponse response = new HttpJunitResponse(); try { m.doGet(request, response); response.getWriter().close(); } catch (IOException | ServletException e) { // TODO Auto-generated catch block e.printStackTrace(); } assertTrue(1>0); }
以下は、このテスト ケースに合格するためのコードです。 まず、コマンド パラメーターに従って次のコードを MainServlet ジャンプに追加します:
switch (cmd) { case "registerUser": registerUser(request, response); break;
具体的な処理関数は次のとおりです:
private void registerUser(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); String userName = null; if (request.getParameter("userName") != null) { userName = request.getParameter("userName"); } out.print("userName=" + userName + "!"); }
テスト ケースを実行し、d:/ablog/app.html を開くと、ユーザー名がファイルに出力されていることがわかります。
しかし、ちょっと待ってください。上記のテスト手順は自動化されていないだけでなく、特に返されたページに多くのコンテンツが含まれている場合には、ブラウザを開いて直接 URL にアクセスするよりも便利です。したがって、上記のテスト ケースを自動的にテストできるように変換する必要があります。前の記事からわかるように、ページに表示する必要があるコンテンツを、通常は Map
それでは、まずこの機能を実装しましょう。 MainServlet.registerUser で Map
Map<String, Object> model = new HashMap<String, Object>(); long userId = 101; model.put("userId", "" + userId); request.setAttribute("model", model);
テスト ケースでは、userId 値が正しく設定されているかどうかをテストします。 :
Map<String, Object> model = (Map<String, Object>)request.getAttribute("model"); if (model.get("userId") != null && Long.parseLong("" + model.get("userId"))==101) { rst = true; }
この時点で、テスト ケースの実行が失敗していることがわかります。 getAttribute メソッドと setAttribute メソッドが HttpJunitRequest オブジェクトに実装されていないため、これは正常です。テスト ケースを成功させるには、次のコードを HttpJunitRequest に追加する必要があります。
private final Map<String, Object> attributes = new HashMap<String, Object>(); @Override public Object getAttribute(String key) { return attributes.get(key); } @Override public void setAttribute(String key, Object value) { attributes.put(key, value); }
この時点でテスト ケースを再度実行します。ようやく、身も心も快い緑のパスサインとなる成果を発揮することができます。
これまでに、基本的に最小限の実行可能なシステムを構築し、TDD の概念に従って開発できるようになりました。
上記の例からわかるように、毎回最初に小さな関数のテストケースを考え、このテストケースを通過するようにコードを作成し、通過した後は新しい関数を追加し続けます。各テスト、開発、検証には最大 20 ~ 30 分しかかかりません。このようにして書かれたコードは基本的に十分なテストが行われており、コードの品質はある程度保証されます。
上記は新しい Java 運動の内容です: テスト駆動開発 3---ユーザー登録 さらに関連した内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。