Revision 2 as of 2009-12-21 05:30:19

Clear message
Locked History Actions

wicket/ExWicketTester

拡張Wicketテスタ

ここでは、Wicketに標準で備わっているひどいテスタの代わりに、タイプセーフでリファクタリングに強い代替のテスタを提案してみる。

ひどいWicketプログラムとそのテスト

ひどいとは言っても、ごく普通に書くとこうなる。

<html>
<title>Login</title>
<body>
<div wicket:id="feedback"></div>
<form wicket:id="loginForm">
<table border="0">
 <tr><td>メールアドレス</td><td><input type="text" wicket:id="email"/></td></tr>
 <tr><td>パスワード</td><td><input type="password" wicket:id="pass"/></td></tr>
 <tr align="right"><td colspan="2"><input type="submit" value="ログイン"/></td></tr>
</table>
</form>
</body>
</html>

import org.apache.wicket.markup.html.*;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.markup.html.panel.*;
import org.apache.wicket.model.*;

public class LoginPage extends WebPage {
  
  public LoginPage() {    
    add(new FeedbackPanel("feedback"));
    add(new LoginForm());
  }
  
  class LoginForm extends Form<Void> {    
    
    private LoginForm() {
      super("loginForm");
      add(new TextField<String>("email", new Model<String>()));
      add(new PasswordTextField("pass", new Model<String>()));
    }    
    
    @Override
    public void onSubmit() {
      String mail = get("email").getDefaultModelObjectAsString();
      String pass = get("pass").getDefaultModelObjectAsString();
      
      // login success or failed ....     
    }
  }
}

import org.apache.wicket.util.tester.*;
import org.junit.*;

public class LoginTest {

  @Test
  public void test() {
    WicketTester tester = new WicketTester();
    tester.startPage(LoginPage.class);
    tester.assertRenderedPage(LoginPage.class);
    tester.assertNoErrorMessage();
    
    FormTester formTester = tester.newFormTester("loginForm");
    formTester.setValue("email", "sysdba");
    formTester.setValue("pass", "masterkey");
    formTester.submit();
    tester.assertNoErrorMessage();
    
  }
}