Locked History Actions

Diff for "wicket/ExWicketTester"

Differences between revisions 1 and 2
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
以下続く。。。。 == ひどい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();
    
  }
}

}}}

拡張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();
    
  }
}