サーバサイド単体テスト¶
項目
アプリケーションサーバの構築¶
サーバサイド単体テストを実行できる環境を構築します。IM-Juggling においてIM-UnitTestを含めたWARファイルでアプリケーションサーバを構築してください。IM-UnitTestはモジュール構成内の「開発フレームワーク」カテゴリに存在します。
テストケースについて¶
テストケースは、スクリプト開発モデルで作成します。テストケース作成には、いくつかのルールが存在します。
テストケースでの関数の種類と実行順序¶
特殊関数の種類
特殊関数は、単体テストを行う上で特別な意味を持つ関数です。
特殊関数 説明 testXXXXXX() test から始まる関数を検索して、随時実行します。この関数内に評価関数を用いて、テスト内容を記述します。各関数の実行する順序に決まりはありません。 setUp() 各 testXXXXXX()が実行される前に実行される関数です。存在しない場合は実行されません。 tearDown() 各 testXXXXXX()が実行された後に実行される関数です。存在しない場合は実行されません。 oneTimeSetUp() テストケースファイルがロードされた直後に一度だけ実行されます。存在しない場合は実行されません。 oneTimeTearDown() テストケース内のすべての testXXXXXX()の実行が終わった後の一番最後に一度だけ実行されます。存在しない場合は実行されません。 defineTestSuite() この関数が定義されていた場合、このファイルをテストスィートとして扱います。「テストスィート」とは、複数のテストケースをまとめて実行するための機能です。その他の関数はすべて無視されます。テストスィートのファイルを作成する場合は、この関数だけを定義します。評価関数
評価関数は、テストの結果を評価するために利用する関数です。この関数を用いることで、テスト結果として情報が収集されます。
評価関数 説明 JsUnit.assert([comment], actual) 評価値(actual)が true であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertTrue([comment], actual) 評価値(actual)が true であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertEquals([comment], expect,actual) 評価値(actual)と期待値(expect)が同じであることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNull([comment], actual) 評価値(actual)が null であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertUndefined([comment], expect, actual) 評価値(actual)が undefined であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNaN([comment], actual) 評価値(actual)が NaN であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertFalse([comment], actual) 評価値(actual)が false であることを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNotEquals([comment], expect,actual) 評価値(actual)と期待値(expect)が同じでないことを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNotNaN([comment], actual) 評価値(actual)が NaN でないことを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNotNull([comment], actual) 評価値(actual)が null でないことを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.assertNotUndefined([comment], actual) 評価値(actual)が undefined でないことを確認します。コメント(comment)は、評価に失敗した場合、結果に表示されます。省略可能です。 JsUnit.fail(message) 評価に失敗させます。メッセージ(message)は結果に表示されます。実行順序
テストケース内の関数の実行順序のイメージは以下の通りです。テストケースファイルにテスト関数として testSample1() と testSample2() が記述されていた場合を例にします。なお、testSample1() と testSample2()は入れ替わる場合があります。(順位不同)
- oneTimeSetUp()
- setUp()
- testSample1()
- tearDown()
- setUp()
- testSample2()
- tearDown()
- oneTimeTearDown()
テストケースの作成¶
テストケースは、実際の単体内容を記述します。特殊関数(defineTestSuite()を除く)および評価関数を用いて、テスト内容を記述します。テスト対象ファイル(user/test/source.js)
// 2つの値を加算します。 function calcPlus(x, y) { return x + y; }テストケース
// テスト対象 user/test/source.js をオブジェクトとしてロードします。 let module = JsUnit.loadScriptModule("user/test/source"); function testSample1() { // テスト対象の関数を呼び出します。 let result = module.calcPlus(1,2); // 関数の結果が正しいかテストします。 JsUnit.assertEquals(3,result); // 関数の結果が正しいかテストします。(コメント付) JsUnit.assertEquals("足し算のテスト(1 + 2)",3,result); }注意
テストケースを作成するにあたって、以下の点に注意してください。
画面遷移が発生する API を使用してはいけません。画面遷移が発生する API (Debug.browse(), redirect(), forward(), Module.alert.* など)を記述した場合、指定した画面に遷移するため正常に動作できません。別の関数に分けるなどして、テストを行ってください。
テストスィートの作成¶
テストスィートは、複数のテストケースをまとめて実行できます。テストスィートの作成には、defineTestSuite 関数を定義します。defineTestSuite 関数内でJsTestSuiteオブジェクトを作成し、グループ化したいテストケースおよびテストスィートファイルを追加します。function defineTestSuite() { // JsTestSuiteオブジェクトの作成 // JsTestSuiteオブジェクトの第一引数は名称です。 let suite = new JsTestSuite("テストの集まり"); // テストケースまたはテストスィートファイルを追加します。 // addTest関数の第一引数は名称です。 // addTest関数の第二引数はテストケースまたはテストスィートファイルのパス(フルパス)です。 suite.addTest("1つ目のテストです。","sample/testcase/test2"); suite.addTest("2つ目のテストです。","sample/testcase/test3"); suite.addTest("3つ目のテストです。","sample/testcase/test_suite2"); // テストスィートオブジェクトを返却します。 return suite; }
テストケースの配置と実行¶
テストケースの配置¶
作成したテスト対象ファイル、テストケースファイルおよびテストスウィートファイルを以下の場所に配置してください。なお、テスト対象ファイルが既に配置されている場合は、配置の必要はありません。アプリケーションサーバ内のWARファイル展開フォルダ/WEB-INF/jssp/src