NeoNagatter


しょっぴーの指摘を受けてまた修正します。
とりあえず、修正前のコードをうpします。

▼WicketApplication.java

import org.apache.wicket.protocol.http.WebApplication;

public class WicketApplication extends WebApplication {
	/*** constructor ***/
	public WicketApplication() {
	}

	/*** method ***/
	@Override
	protected void init() {
		super.init();
		this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
	}

	public Class<HomePage> getHomePage() {
		return HomePage.class;
	}
}


▼HomePage.java

import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.PropertyModel;

/**
 * Homepage
 */
public class HomePage extends WebPage {

	private static final long serialVersionUID = 1L;

	/**
	 * Constructor that is invoked when page is invoked without a session.
	 * 
	 * @param parameters
	 *            Page parameters
	 */

	public HomePage(final PageParameters parameters) {
		PostingData data = new PostingData();
		TextField<String> inputId = new TextField<String>("inputId",
				new PropertyModel<String>(data, "userId"));
		PasswordTextField inputPw = new PasswordTextField("inputPw",
				new PropertyModel<String>(data, "password"));
		TextArea<String> inputSb = new TextArea<String>("inputSb",
				new PropertyModel<String>(data, "subject"));
		SubmitButton confirmButton = new SubmitButton("confirmButton", data);
		Form<Object> inputForm = new Form<Object>("inputForm");

		inputForm.add(inputId, inputPw, inputSb, confirmButton);
		this.add(inputForm);

	}

}


▼ConfirmPage.java

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class ConfirmPage extends WebPage {

	public ConfirmPage(PostingData data) {
		Label confirmId = new Label("confirmId", data.getUserId());
		Label confirmSb = new Label("confirmSb", data.getSubject());
		SubmitLink submitlink = new SubmitLink("submitLink", data);
		this.add(confirmId, confirmSb, submitlink);

	}

}


▼ResultPage.java

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class ResultPage extends WebPage {
	/*** constructor ***/
	public ResultPage(String msg) {
		Label resultmsg = new Label("resultmsg", msg);
		this.add(resultmsg);
	}
}


▼PostingData.java

import java.io.Serializable;

import twitter4j.Twitter;
import twitter4j.TwitterException;

public class PostingData implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/*** field ***/
	private String userId;
	private String password;
	private String subject;

	/*** constructor ***/
	public PostingData() {

	}

	public PostingData(String i, String p, String s) {
		this.userId = i;
		this.password = p;
		this.subject = s;
	}

	/*** method ***/
	public boolean postToTwitter() {
		Twitter twitter = new Twitter(userId, password);
		try {
			twitter.updateStatus(subject);
			System.out.println("Success");
			return true;
		} catch (TwitterException e) {
			e.printStackTrace();
			return false;
		}

	}

	/*** getter&setter ***/
	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getUserId() {
		return userId;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getPassword() {
		return password;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getSubject() {
		return subject;
	}

}


▼SubmitButton.java

import org.apache.wicket.markup.html.form.Button;

public class SubmitButton extends Button {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/*** field ***/
	private final PostingData postingData;

	/*** constructor ***/
	public SubmitButton(String id, PostingData data) {
		super(id);
		this.postingData = data;
	}

	/*** method ***/
	@Override
	public void onSubmit() {
		this.setResponsePage(new ConfirmPage(postingData));

	}

}


▼SubmitLink.java

import org.apache.wicket.markup.html.link.Link;

public class SubmitLink extends Link<String> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8707896010504827907L;

	/*** field ***/
	private PostingData postingData;

	/*** constructor ***/
	public SubmitLink(String id, PostingData data) {
		super(id);
		this.postingData = data;

	}

	/*** method ***/
	@Override
	public void onClick() {
		if (postingData.postToTwitter()) {
			this.setResponsePage(new ResultPage("投稿に成功しました。"));
		} else {
			this.setResponsePage(new ResultPage("投稿に失敗しました。"));
		}

	}

}

テストコード
TestHomePage.java

import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

public class TestHomePage {
	private WicketTester tester;

	@Before
	public void setUp() {
		tester = new WicketTester();
		tester.startPage(HomePage.class);
	}

	@Test
	public void ページ表示() {
		tester.assertRenderedPage(HomePage.class);
	}

	@Ignore
	@Test
	public void ラベル表示() {
		tester.assertLabel("testmsg", "aaa");
	}

	@Test
	public void フォームの表示() {
		tester.assertComponent("inputForm", Form.class);
		tester.assertComponent("inputForm:inputId", TextField.class);
		tester.assertComponent("inputForm:inputPw", PasswordTextField.class);
		tester.assertComponent("inputForm:inputSb", TextArea.class);
		tester.assertComponent("inputForm:confirmButton", Button.class);
	}

}

TestConfirmPage.java

import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Before;
import org.junit.Test;

public class TestConfirmPage {
	private WicketTester tester;

	@Before
	public void setUp() {
		tester = new WicketTester();
		tester.startPage(HomePage.class);
		FormTester formTester = tester.newFormTester("inputForm");
		formTester.setValue("inputId", "hoge");
		formTester.setValue("inputPw", "hoge");
		formTester.setValue("inputSb", "hoge");
		formTester.submit("confirmButton");
	}

	@Test
	public void ページの表示() {
		tester.assertRenderedPage(ConfirmPage.class);
	}

	@Test
	public void リンクでページ遷移するか() {
		tester.clickLink("submitLink");
		tester.assertRenderedPage(ResultPage.class);
	}

}

TestResultPage.java

import org.apache.wicket.util.tester.WicketTester;
import org.junit.Before;
import org.junit.Test;

public class TestResultPage {
	private WicketTester tester;

	@Before
	public void setUp() {
		tester = new WicketTester();
		tester.startPage(ResultPage.class);
	}

	@Test
	public void testRenderMyPage() {
		tester.assertRenderedPage(ResultPage.class);
	}

}