公式サイトのFunctionalTestのサンプルコードは実践ではちょっと辛いと思ったので、その改良版を編み出したメモ。
基底クラスでTestServerの起動・停止、TestBrowserの生成を、@BeforeClassと@AfterClassでやると、書きやすくなる。もとがFluentLeniumなので、そこのサンプルコードに寄せたということ。
基底クラス
TestBase.java
public class TestBase {
protected static TestServer testServer;
public static TestBrowser browser;
protected static int PORT = 1111;
public static final String baseUrl = "http://localhost:" + PORT;
@BeforeClass
public static void startTestServer() {
browser = testBrowser();
testServer = testServer(PORT);
start(testServer);
}
@AfterClass
public static void stopTestServer() {
stop(testServer);
}
}
テストコードのサンプル
SampleTest.java
public class SampleTest extends TestBase {
@Test
public void ログインページが表示される() {
browser.goTo(baseUrl + "/login");
assertThat(browser.title()).isEqualTo("ログイン");
}
@Test
public void ログインできる() {
browser.goTo(baseUrl + "/login")
.fill("input[name='id']").with("123")
.fill("input[name='password']").with("password")
.click("input[name='login']");
browser.await().atMost(10 * 1000);
assertThat(browser.title()).isEqualTo("ホーム");
}
}
まとめ
こうすると、ブラウザ操作をしてその結果をassertionする、というのがはっきりできた。
ブラウザ操作も、直感的に書けるし、継承していくことでテストクラスを簡単に増やしていける。