BDD Framework のやりづらさを黒魔術で解決しよう!
片野 潤一アジャイル営業推進部伊藤忠テクノソリューションズ株式会社Testing Framework がいい。とてもいい。
View Slide
片野 潤一 [email protected]JavaStruts/Spring/MyBATIS2005 2014OutSystemsDeveloper@3人(6か月)Developer && TL@約10人(24か月)OutSystems 推進2019 2020Scrum on AWSRole:DeveloperTypeScriptServerlessDynamo, Lambda, S3, SQS, Kinesis,AthenaAngular認定スクラムマスター(CSM)AWS Certified DevOps Engineer - ProfessionalOutSystems 資格 8 個(Expert Traditional Web Developer 含む)好き:リアル脱出ゲーム、低温調理、肉、ゴルフ、スパイス、オクトラOutSystemsOutSystems 推進Expert Servicenow!!2
BDD Framework
BDD Framework Testing Framework
BDD Framework のDeveloper Experienceはどうでしたか?
先端開発者にとっての働きやすい環境と高速な開発を実現するための文化・組織・システムが実現されているかを意味する開発者体験(Developer eXperience)です。https://cto-a.github.io/dxcriteria/about.html“Developer eXperience?ある特定のシステムを開発・保守する開発者をユーザーと捉え、彼ら・彼女らの開発に伴う体験 https://buildersbox.corp-sansan.com/entry/2019/03/11/121417“
テスト対象を Public にせざるを得ない問題テスト用eSpaceeSpaceテスト用アプリケーションw/ BDD Framework業務用アプリケーション参照業務ロジックアサーション前処理/後処理さぁ実装だ!
テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理業務ロジックを実装するPub った!1テスト対象を Public にせざるを得ない問題テスト用アプリケーションw/ BDD Framework
よしテストするぞテスト用アプリケーションから業務ロジックを探す2テスト対象を Public にせざるを得ない問題テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!テスト用アプリケーションw/ BDD Framework業務ロジックを実装する1
あれ?ないぞ?テスト対象を Public にせざるを得ない問題テスト用アプリケーションから業務ロジックを探す2テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!テスト用アプリケーションw/ BDD Framework業務ロジックを実装する1気付く3
ああ!Public か!テスト対象を Public にせざるを得ない問題テスト用アプリケーションから業務ロジックを探す2テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!テスト用アプリケーションw/ BDD Framework業務ロジックを実装する1気付く3
テスト対象を Public にせざるを得ない問題テスト用アプリケーションから業務ロジックを探す2テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!テスト用アプリケーションw/ BDD Framework業務ロジックを実装する1気付く3悩む4え、でもそれってテストのためにプロダクションコードの実装に手を加えるってこと?そもそも可視性が2通りしかないし公開したい Producerを指定するような仕組みがないときついっていうかテスト対象 Public にしていったら関係ないのに使われる可能性を否定できないし Public であるべきでない Action もPublic にしないとテストができないの?まじかーそっかー(超早口)
テスト対象を Public にせざるを得ない問題まとめBDD は OutSystems の仕組みに則った正規の手段で Action を実行する想定OutSystems の可視性バリエーションは Private / Public の2種類のみよって以下のような Private Action をテストしたい場合 Public にせざるを得ない- 1か所でしか使われていない完全 Private な Action- eSpace 内 Public な ActionPublic プロパティは実装の意図を伝えるための側面が強い(個人差があります)そのため、テスティングフレームワークの影響で強制されるのは違和感がある
Testing Framework
テスト対象を Public にせざるを得ない問題テスト用eSpaceeSpaceテスト用アプリケーションw/ Testing Framework業務用アプリケーション参照業務ロジックアサーション前処理/後処理さぁ実装だ!
テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理業務ロジックを実装するPub った!1テスト対象を Public にせざるを得ない問題テスト用アプリケーションw/ Testing Framework
よしテストするぞテスト用アプリケーションの何か一つを参照する2テスト対象を Public にせざるを得ない問題テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!業務ロジックを実装する1テスト用アプリケーションw/ Testing Framework
楽だなーテスト対象を Public にせざるを得ない問題テスト用アプリケーションの何か一つを参照する2テスト用eSpaceeSpace業務用アプリケーション参照業務ロジックアサーション前処理/後処理Pub った!業務ロジックを実装する1Private だろうが Public だろうが呼び出し放題!!3テスト用アプリケーションw/ Testing Framework
Testing Framework でのテスト実装テスト対象:GetNextProductNumberPublic:No処理:Aggregate の結果 に +1 して返す
Testing Framework でのテスト実装テスト対象:GetNextProductNumberPublic:No処理:Aggregate の結果 に +1 して返すまずは Public にする!そして SetUp で GetLastProduct がデータを取得できるデータを作成して、あ、あとは意図しないデータがあったらエラーにするなり削除するなりしないとなー副作用に注意しなくちゃな!
Testing Framework でのテスト実装Public 化不要!
Testing Framework でのテスト実装(今回は)データセットアップ不要!Public 化不要!簡単に Mocking 化!!!
Testing Framework でのテスト実装テスト開始を宣言1テスト対象の Proxy を宣言2Mock クエリの結果を宣言3Mock クエリの結果をセット4Proxy 経由で Private Action を実行5アサーション6
OutSystems のテスティングフレームワーク特徴ざっくりTesting Frameworkテスト対象強制 Public やるしかない 黒魔術で解決プロダクションコードに入り混じる黒魔術で解決Mocking 実装プロダクトバージョンアップへの追従性原理的に心配なし 破綻するかもClient Action 対応 あり なしBDD Framework
今日のまとめBDD Framework は盤石な OutSystems 公式のテスティングフレームワーク公式がサポートし、OutSystems でのテスティングの中心的存在であるが、仕組み上「できないこと」や「できるけれどもやりづらい」ことが多々あるそんな中 Testing Framework という選択肢が彗星のごとく現れた「BDD でやりづらいことを C# を駆使した黒魔術で解決」している公式サポートはゼロだが、ユニットテストの生産性向上に役に立つかも
https://www.outsystems.com/forge/component-overview/12754/testing-frameworkServer Action にオススメ!皆さんも使ってみましょう!!
ご清聴ありがとうございました