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