テスト用メソッドを使ってテストを行なう
では、これにテスト用のメソッドを追加してみましょう。ここでは、例として「test」というテスト用メソッドを用意してみます。
package jp.tuyano;
import org.junit.Before;
mport org.junit.Test;
public class SampleAppTest {
@Before
public void setUp() throws Exception {
}
@Test
public void test() {
// ここに処理を書く
}
}
こんな感じになります。見ればわかるように、テスト用のメソッドといっても、ただの返値がvoidで引数のないpublicなメソッドですね。ただし、その前に「@Test」というものがついています。これが実は、非常に重要なのです。JUnit 4では、この@Testというものがあると、それ以降のメソッドを自動的にテスト用のメソッドとみなしてテスト時に実行するようになっているのです。
ここでは「@Before」とか「@Test」とか、なんだか見慣れないものが登場しています。これらは「アノテーション」と呼ばれるものです。これはJava5よりサポートされたもので、ソースコードの中に記述される、コードでもなくコメントでもない、第3の要素となるものです。アノテーションは、コードに付随する各種の情報を与えるのに用いられるもので、JUnit 4ではメソッドの性質や役割などを示すものとしてアノテーションが用いられています。JUnit 4では、あらかじめ「@Beforeの後にあるのは事前処理のメソッド」「@Testの後にあるのはテスト用のメソッド」ということが決められており、これらのアノテーションをメソッド前に記述することで、それらのメソッドの役割を特定できるようになっているのですね。
というわけで、この@Testの後にあるtestメソッドにテスト用の処理を書けば、テストが実行されるようになります。サンプルとして、ごく単純なテストの処理を用意してみることにしましょう。
package jp.tuyano;
import org.junit.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class SampleAppTest {
SampleApp sampleapp;
@Before
public void setUp() throws Exception {
sampleapp = new SampleApp();
sampleapp.setVisible(true);
}
@Test
public void test(){
sampleapp.field.setText("1234");
ActionEvent ev = new ActionEvent(sampleapp.button,
ActionEvent.ACTION_PERFORMED,"action");
sampleapp.buttonAction(ev);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
テスト後にすぐに終了すると結果がわかりにくいので、最後にThread.sleepで少し待たせるようにしてありますが、これは不要なら削除してください。――ここでは、setUpのところであらかじめSampleAppを作成しておきます。そしてテストメソッドのところで、sampleapp.fieldにサンプルとして"1234"とテキストを設定し、それからsampleapp.buttonActionメソッドを呼び出して処理を実行させています。
このテスト・メソッドを使ってテストを行ってみましょう。SampleAppTest.javaを開いた状態で、<実行><実行><JUnitテスト>メニューを選んでください。SampleAppTestがJUnitによって実行され、SampleAppにtestメソッドを使ってテストを実行します。テストが問題なく終了すると、「JUnit」ビューに緑色のバーが表示され、プログラムが終了します。問題があると、「JUnit」ビューに赤や青のバーが表示され、例外が表示されたり、下の「障害トレース」にトレースされた地点が表示されたりします。
実際に何回か実行してみれば、testメソッドに書かれた処理が実行され、SampleAppの動作(ここではbuttonActionメソッド)が正常に動いていることをチェックしていることがわかってくるでしょう。仕組みがわかったら、例えばampleapp.field.setTextを乱数で変更するなどアレンジしてみるとよりテストらしくなりますね。
まぁ、実際のところ、ここであげたサンプルのように、直接的にメソッドを呼び出してチェック!というような使い方でチェックできる場合とできない場合があるかと思います。が、テストと本プログラムの関係のようなものは、なんとなくわかってくるんじゃないでしょうか。