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

テストデータExcelファイルの中身

以前に作ったものをそのまま使っています。


■init.xls(テスト実行前の初期状態)



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


ちゃんとエラーになりますね!