Forgeに、ODC用のBDD Frameworkが既に登録されていたので、試してみた。
まずは、簡単なテストケースを1つ実装してみて、O11の時との相違点を主にみていく。
環境情報
ODC Studio(Version 1.2.3)
BDD Framework (version 0.1.2)
Template_BDD Framework (version 0.1.3)
感想(まとめコメント)
- テストの実装方法はO11と変わらず
- Applicationが無くなったので、BDD Framework本体、テンプレート、API、API用ライブラリと4つのApp/Libraryに分離して別々のForgeコンポーネントとして登録されている
- O11のBDDFramework Client Sideコンポーネントのドキュメントにあった、Server Actionをテストすると遅くなるという文言は無くなった
- セキュリティ機能が追加されたので、Settingの設定と呼び出し時のInput Parameter設定が必要
アーキテクチャ変更
O11にはApplicationがあるため、1つのApplication内に本体、Screen Template、カスタムアプリケーションテンプレート、支援用Extensionが含まれていた。
ODCではApplicationが無くなったので、以下4つのApp/Libraryに分離されている。
- BDD Framework: (Library) テスト用ツールの本体、テストシナリオ作成用BlockやAssert用Actionを含む
- Template_BDD Framework: (App) BDD Framework用のテストアプリケーションのテンプレート。見た限りでは、O11のカスタムアプリケーションテンプレートに相当する機能はドキュメントには見つからない。が、このAppをインストールするとApp作成時のTemplateとしてこのAppが出てくるため、実装はされているようだ
- BDD Framework API: (App) BDD Frameworkで作成したテストを起動するREST APIを提供する
- BDDFrameworkTestRunLib: (Library) API用のLibrary
インストール
ODC Portalでサイドバーの下にあるForge > All assetsをクリック。

「BDD」などでフィルタし、少なくともBDD FrameworkとTemplate_BDD Frameworkをインストール。
テストAppを作成する
ODC Studioで作業する。
- Createをクリック
- 表示されたダイアログで、Appを選択しContinueボタンをクリック
- ダイアログが切り替わり、Appのテンプレートを選択する状態になる。BDD Frameworkを選択しContinueボタンをクリック

4.NameとDescriptionは適当に埋めて「Create app」ボタンをクリック
ここまでで、必要な参照と、テンプレートScreen/Blockを含むテストAppの準備ができた。
テスト用Screen (Test Suite) とBlock (Test Scenario) を作成する
- 作成されたAppをODC Studioで開き、画面上部のプラグのアイコンをクリック
- 「Add public elements to」ダイアログでテスト対象Actionへの参照を追加
- Test Suite/Test Scenario用にUI Flowを作成する(Test Scenarioが1つのテストケース、Test Suiteは複数のTest Scenarioをまとめたもの)

(Test Scenarioが増えてくると、ScenarioとSuiteが同じUI Flowにあるとみにくくなるので、それぞれに別のUI Flowを作成している。1つにまとめる案もある) - ScreenTemplates UI FlowからTest Scenario用Blockをコピーして、↑で作ったTest Scenario用UI Flowに貼り付け。名前は適当に変更する

(ScreenTemplatesの下には、以下の3種類のテストケースに対応するTest Suite/Scenarioのテンプレートがある
- 単独のテストケース:New_Suite/Scenario
- DataDrivenテストケース(テストケースはStatic Entityで定義):DataDrivenDbScenario_Suite/Scenario
- DataDrivenテストケース(テストケースはExcelで定義):DataDrivenXlsScenario_Suite/Scenario
)
5.. ScreenTemplates UI FlowからTest Suite用Screenをコピーして、↑で作ったTest Suite用UI Flowに貼り付け。名前は適当に変更する。Screen内にTest Scenario向けBlockが配置されているが、参照先がTemplateになっているため、↑の手順で作ったBlockに差し替える
AuthToken:追加されたセキュリティ
ここまでに作成したScreenを右クリックして、Open in Browserを選択すると、ブラウザ上で画面が開き、テストの実行結果が表示される。それはOutSystems 11の時と同じ。
まだテストそのものは実装していないため、ほぼ空で表示されるはず……だが、実は以下のエラーメッセージが表示される。

これは、ODC版のBDD Frameworkの新機能。Setting (O11のSite Propertyに相当)のAuthenticationSecretTokenの値を、ScreenのAuthToken Input Parameterに渡さないと発生する。
このAuthenticationSecretTokenというSettingは、BDD FrameworkがLibraryであることから、参照側のテストAppをODC Portalで開いて設定する。
なお、Is Secret=YesのSettingはデフォルト値がないため、何らかの設定を行う必要がある。
テスト実装
ここは、OutSystems11の時とあまり変わらない。
Static Entityを使ったData Drivenなテストを例に実装手順を示す。
- コピーしてきたScreenに初期設定されているAggregateにはOrderが指定されていないので、IdかOrder Attributeでソートされるように設定しておく
- Static Entityを利用するテストの場合、1レコードが1つのテストケースに該当する。テストケースに必要な値をAttributeとしてStatic Entityに追加しておく
(例:黄色で塗ったAttributeを追加した。Whenで呼ぶActionに渡すものにInput_、ThenでAssertに使うものにOutput_のプレフィックスをつけている)
- テストケース数分のレコードを定義しておく
- Test Scenarioに対応するBlockの実装を行う
- ScenarioIdentifier PlaceholderにはTestData Input ParameterのId Attribute、ScenarioDescription PlaceohlderにはTestData Input ParameterのScenarioNameを配置。その他のPlaceholderには必要に応じて配置する
- Screen配下の5つのClient Actionにテストを実装する。詳細は、OutSystems 11のBDDFramework向けの記事を参照してほしいが、少なくとも、c_When (テスト対象Actionを実行する)とd_Then (テスト結果に対してAssertする)は実装することになる
(c_When内でのテスト対象Action呼び出し例。Input ParameterにStatic Entityのレコードから受け取った値を渡している)
- ScenarioIdentifier PlaceholderにはTestData Input ParameterのId Attribute、ScenarioDescription PlaceohlderにはTestData Input ParameterのScenarioNameを配置。その他のPlaceholderには必要に応じて配置する

