GUI+DBのユニットテスト③ Java
前回の続きです。
SampleFrameをテストするクラスを作ってみます。
SampleFrameTest.java
setUpメソッドで以下を行っています。
1.データベースの初期化(以前に作ったDbTester.javaを使用)
2.アプリケーションの起動
3.テスト対象画面の指定(SampleFrameを指定)
clickSearchButtonメソッドでSampleFrameの検索ボタンを押して、
FEST-Swingが提供するrequireContentsメソッドで、検索結果がテーブルに表示されているかを確認してます。
package sample; import org.fest.swing.launcher.ApplicationLauncher; import org.junit.After; import org.junit.Before; import org.junit.Test; public class SampleFrameTest { private DbTester dbTester = new DbTester(); private FrameTester frameTester = new FrameTester(); @Before public void setUp() throws Throwable { // データベースの初期化 this.dbTester.setUp(Dbcp.getInstance().getConnection()); this.dbTester.initDb("testdata/SampleFrameTest/init.xls"); // アプリケーション起動 ApplicationLauncher.application(SampleFrame.class).start(); // テスト対象画面を指定 this.frameTester.setUp(SampleFrame.class); } @After public void tearDown() throws Throwable { this.dbTester.tearDown(); this.frameTester.tearDown(); } @Test public void clickSearchButton() throws Throwable { // 検索ボタンを押下 this.frameTester.getFrame().button("searchButton").click(); // 検索結果がテーブルに表示されているかを確認 String[][] expected = new String[][] { { "1", "userA" }, { "2", "userB" }, { "3", "userC" } }; this.frameTester.getFrame().table("userTable").requireContents(expected); } }
クリック操作の他に、キー入力やマウスドラッグなど様々な操作やテストがFEST-Swingでサポートされています。
FEST-Swingは日本語ドキュメントが少ないのですが、
英語の公式ドキュメントとAPIドキュメントを見ればなんとかなると思います。(なんとか実践投入済み)
FEST-Swingでサポートされていないテストを行いたい場合は、
コンポーネントのインスタンスを取得して自前で実装する事もできます。
JButton button = this.frameTester.getFrame().button("searchButton").target;
今回はサンプルなんで、setUpメソッドで「アプリケーションの起動」からテストを開始していますが、
実際のプロジェクトで使う場合は「テスト対象画面の表示」からテスト開始でいいかなと思います。
画面遷移に関しては、画面遷移確認用のテストメソッドを実装すればいいかなと思うので。
public void setUp() throws Throwable { // データベースの初期化 // テスト対象画面の表示 XXXFrame frame = new XXXFrame(); frame.setVisible(true); // テスト対象画面を指定 this.frameTester.setUp(XXXFrame.class); }
Eclipseから実行してみる
Eclipseから実行してみます。実行方法は以前と同じです。
テストを実行するとSampleFrameが表示されて、マウスが勝手に動いて検索ボタンを押します。
わざとエラーにしてみます。
clickSearchButtonメソッドの期待値を変更して実行すると・・・
@Test public void clickSearchButton() throws Throwable { // 検索ボタンを押下 this.frameTester.getFrame().button("searchButton").click(); // 検索結果がテーブルに表示されているかを確認 //String[][] expected = new String[][] { { "1", "userA" }, { "2", "userB" }, { "3", "userC" } }; String[][] expected = new String[][] { { "1", "userA" }, { "2", "HOGEHOGE" }, { "3", "userC" } }; this.frameTester.getFrame().table("userTable").requireContents(expected); }
ちゃんとエラーになりますね!