ホームページ > Java > &#&チュートリアル > 新しい Java の動き: テスト駆動開発 3---ユーザー登録

新しい Java の動き: テスト駆動開発 3---ユーザー登録

黄舟
リリース: 2016-12-30 13:11:24
オリジナル
1261 人が閲覧しました

ユーザー登録プロセスでは、ユーザーはユーザー名とパスワードを入力し、ユーザーの基本情報とアカウント情報をデータベースに正しく登録します。

最初のステップは、テスト ケースを作成し、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 の形式でリクエスト オブジェクトに保存します。ページはそこから値を取得するだけです。したがって、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) に注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート