htmlunitを使ってS2JSF Exampleをテストする。
htmlunitの存在を知ってから、ぜひ使ってみたいと思っていたので、試してみました。
直感的にテストが書けて非常に良いですね。ちなみに以前にJameleonを使おうとして、S2JSFが出力するHTMLの日本語がコード化されるために面倒なことになり、断念した過去があるのですが(^^;、htmlunitなら大丈夫でした。
ちなみに、テストし易いようにS2JSF Exampleのhtmlにidを明確に記述したり、日本語を試すためにページ内に「足し算」と表示するなど、一部変更しています。
事前準備
- htmlunit-1.8.zipをDLし、jarをS2JSF Exampleに追加する。
- text.html.HtmlTestクラスをeclipseのウィザード使って新規作成する(JUnitのテストケース)。
ソースは次のようになります。情報があまりないので、javadocを参考にあれこれ書いてみました。
メニュー画面からAddまでの遷移テスト
public void testAddPage() throws Exception { final WebClient webClient = new WebClient(); final URL url = new URL("http://localhost:8080/s2jsf-example/"); final HtmlPage hogePage = (HtmlPage)webClient.getPage(url); assertEquals( "Home", hogePage.getTitleText() ); final HtmlAnchor anchor = (HtmlAnchor)hogePage.getHtmlElementById("menu:Add"); final HtmlPage addPage = (HtmlPage)anchor.click(); assertEquals( "Add", addPage.getTitleText() ); String pageText = addPage.asText(); assertTrue(pageText.contains("足し算")); }
Addの正常系テスト
public void testAddNormalPage() throws Exception { final WebClient webClient = new WebClient(); final URL url = new URL("http://localhost:8080/s2jsf-example/add/add.html"); final HtmlPage addPage = (HtmlPage)webClient.getPage(url); assertEquals( "Add", addPage.getTitleText() ); String pageText = addPage.asText(); assertTrue(pageText.contains("足し算")); final HtmlForm form = addPage.getFormByName("add"); final HtmlSubmitInput button = (HtmlSubmitInput)form.getInputByName("add:calculate"); final HtmlTextInput textFieldArg1 = (HtmlTextInput)form.getInputByName("add:arg1"); textFieldArg1.setValueAttribute("1"); final HtmlTextInput textFieldArg2 = (HtmlTextInput)form.getInputByName("add:arg2"); textFieldArg2.setValueAttribute("2"); final HtmlPage addResultPage = (HtmlPage)button.click(); String page2Text = addResultPage.asText(); assertTrue(page2Text.contains("1 + 2 = 3")); }
Addの異常系テスト
public void testAddErrorPage() throws Exception { final WebClient webClient = new WebClient(); final URL url = new URL("http://localhost:8080/s2jsf-example/add/add.html"); final HtmlPage addPage = (HtmlPage)webClient.getPage(url); assertEquals( "Add", addPage.getTitleText() ); String pageText = addPage.asText(); assertTrue(pageText.contains("足し算")); final HtmlForm form = addPage.getFormByName("add"); final HtmlSubmitInput button = (HtmlSubmitInput)form.getInputByName("add:calculate"); final HtmlTextInput textFieldArg1 = (HtmlTextInput)form.getInputByName("add:arg1"); textFieldArg1.setValueAttribute("1"); final HtmlTextInput textFieldArg2 = (HtmlTextInput)form.getInputByName("add:arg2"); textFieldArg2.setValueAttribute("a"); final HtmlPage addResultPage = (HtmlPage)button.click(); String page2Text = addResultPage.asText(); assertTrue(page2Text.contains("変換エラー")); }