JUnitやNUnitのように、ロジック部分(Action)の単体テストをするためのツールがForgeにあります。
Unit Testing Frameworkです。
機能テストや回帰テストははSelenium等の別ツールでテストします。このフレームワークはあくまでロジック部分が担当。
リンク先ではTest Automatorというのも紹介されています。こちらはUIとロジック両方が守備範囲ですが、今回はUnit Testing Frameworkの話です。
Table of Contents
公式情報
http://www.outsystems.com/forge/component-details/387/Unit+Testing+Framework/
pdfのドキュメント(ダウンロードして読むにはDropBoxのアカウントが必要)
OutSystemsの公式のテストおすすめ:リンク切れに付き、リンクは削除
インストール
Versionsから最新バージョンをダウンロードして自分の環境にインストールします。
.oapのファイルでダウンロードされますが、私が試したときは、「.oaファイルが見つからない」というようなエラーが出ました。
ファイルパスの長さ制限があるのかもしれません。Cドライブ直下にダウンロードしたファイルを移動したところ無事にインストールできました。
以下、1Action用意してユニットテストを試してみます。
テスト対象の用意
ユニットテストなのでテスト対象はpublicなAction(プログラミングでいうとメソッドに近いイメージ)。
テストを試してみるため、独立したActionを用意します。
OutSystems+Google Maps API(3) Entityの一覧画面でも地図を表示する
で作成したBranches画面のScreen action「Preparation」から、Branch ListをJavaScriptの文字列に変換する部分を切り出してみます。
元のAction
Logicレイヤを開き、Actions フォルダを右クリックしてAdd Actionして以下のActionを作成しました。
フローは該当部分をカット&ペーストで持っていけます。ActionのPublicプロパティをYesにするのを忘れずに(パブリッシュも)。
テストモジュールの用意
同じアプリケーションにテストモジュールを登録することもできますが、パブリッシュするときに一緒に上がってしまうので、テスト用のアプリケーションを用意して、その中にテストモジュールを置くことにします。
テンプレートモジュールがあるのでそれを開いてクローンします。
まずは、Unit Testing Frameworkアプリケーションを開く。
テンプレートモジュール「UTF_Template」を開きます。
Module→Cloneして新しいテストモジュールを作成。ちなみにこの段階では、Independent Modulesの下にテストモジュールが配置される。
テストActionを用意
Independent Modules下の作成したモジュール(GmapDemoUnitTestと名付けています)を開き、テスト対象のActionへの参照を追加します。
Service Studio上部の「Manage Dependencies」のアイコンをクリック。
開いたダイアログ上で、テスト対象モジュール名の一部を左上のテキストボックスに入力して検索。
先ほど作ったテスト対象Action「BranchesToJSString」とそこでデータ型として利用しているBranch Entityを参照に追加して「OK」。
では、テストActionを作成します。テストActionはSOAPのWebメソッドとして実装します。
UnitTestWebServiceTemlateの下にテンプレートActionがあるので適当に名前を変えて使いましょう(下の例では変えていません)。
テストAction例。テスト対象がBranch Listを要求するのでローカル変数としてBranchとBranchListを追加してあります。
AssignとListAppendで2要素のBranch Listを作って「BranchesToJSString」Action(テスト対象)に渡しています。
フレームワークが提供するAssert系Actionをそのあとで呼ぶ形になっています。
テスト実施
準備ができたらパブリッシュしてブラウザで開きましょう。
こんな画面になるはず。テスト対象のモジュールが自動でリストアップされるので実施したいテストのRunをクリック。
なお、日本語の説明文が表示されていますが、これはテストモジュールのDescriptionに設定した値です。
失敗例
FailedクリックでJUnitなんかと同じように期待されている値に対して実際に何が返ってきたか教えてくれます。
成功例