- 4.1. setUpとtearDown
- 4.2. TestSuiteクラス
4.2. TestSuiteクラス
前章(3章)で「テストクラス内のテストメソッドが実行される順番は保証されない」と説明しました。例えば、4.1の例では、testInsertとtestSelectのどちらが先に実行されるかわかりません。実行する順序を指定する場合は、TestSuiteクラスを使用します。
1:public class SequentialTest extends TestCase{ 2: ... 7: 8: public static Test suite(){ 9: TestSuite suite=new TestSuite(); 10: suite.addTest(new DBTest("testInsert")); 11: suite.addTest(new DBTest("testSelect")); 12: return suite; 13: }
複数のTestをTestSuiteにまとめたいときは、staticメソッドのsuite()を使用します。戻り値はTestインタフェースです。TestRunnerクラスなどは、suite()メソッドがある場合、その戻り値のTestを実行します。TestCaseクラスやTestSuiteクラスもTestインタフェースを実装しています。
9行目でTestSuiteインスタンスを作成しています。10行目と11行目でTestSuiteにテストを追加しています。10行目ではTestSuiteのaddTestメソッドを使用して、DBTestの新しいインスタンスをsuiteに追加しています。DBTestのコンストラクタで引数"testInsert"を指定しています。これより、suiteにはDBTestのtestInsert()を実行するTestが追加されたことになります。同様に、11行目では、DBTestのtestSelect()を実行するTestが追加されました。さて、TestSuiteでは、追加された順でTestが実行されます。よって、SequentialTestを実行すると、testInsert、testSelectの順でテストが行われます。
また、TestSuiteにテストクラス全て加える方法もあります。その際は、add()メソッドの
public class SequentialTest extends TestCase{ ... public static Test suite(){ TestSuite suite=new TestSuite(); suite.addTestSuite(DBTest.class); return suite; }
TestSuiteは、単体テストをまとめて、複合テストを作成する際にも使用できます。
(実習課題1)
以下のクラスを作成する
- PostgresqlのTrainingデータベースのaccept_orderテーブルへ、データの挿入、更新、削除を行うクラスを作成する 。
各操作(挿入、更新、削除)はそれぞれ別々のメソッドに実装する - TestSuite、setUp、tearDownを使用して、上のテストを作成する。
- Test実行前とTest実行後でデータベースの状態が変化しないように工夫すること。