Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[OutSystems] Testing Framework がいい。とてもいい。

[OutSystems] Testing Framework がいい。とてもいい。

BDD Framework のやりづらさを黒魔術で解決しよう!

kata_junn

July 20, 2022
Tweet

More Decks by kata_junn

Other Decks in Programming

Transcript

  1. 片野 潤一 [email protected] Java Struts/Spring/MyBATIS 2005 2014 OutSystems Developer@3人(6か月) Developer

    && TL@約10人(24か月) OutSystems 推進 2019 2020 Scrum on AWS Role:Developer TypeScript Serverless Dynamo, Lambda, S3, SQS, Kinesis, Athena Angular 認定スクラムマスター(CSM) AWS Certified DevOps Engineer - Professional OutSystems 資格 8 個(Expert Traditional Web Developer 含む) 好き:リアル脱出ゲーム、低温調理、肉、ゴルフ、スパイス、オクトラ OutSystems OutSystems 推進 Expert Service now!! 2
  2. テスト対象を Public にせざるを得ない問題 テスト用 eSpace eSpace テスト用 アプリケーション w/ BDD

    Framework 業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 さぁ 実装だ!
  3. テスト用 eSpace eSpace 業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 業務ロジックを実装する

    Pub った! 1 テスト対象を Public にせざるを得ない問題 テスト用 アプリケーション w/ BDD Framework
  4. よしテスト するぞ テスト用アプリケーションから業務ロジックを探す 2 テスト対象を Public にせざるを得ない問題 テスト用 eSpace eSpace

    業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 Pub った! テスト用 アプリケーション w/ BDD Framework 業務ロジックを実装する 1
  5. あれ? ないぞ? テスト対象を Public にせざるを得ない問題 テスト用アプリケーションから業務ロジックを探す 2 テスト用 eSpace eSpace

    業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 Pub った! テスト用 アプリケーション w/ BDD Framework 業務ロジックを実装する 1 気付く 3
  6. ああ! Public か! テスト対象を Public にせざるを得ない問題 テスト用アプリケーションから業務ロジックを探す 2 テスト用 eSpace

    eSpace 業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 Pub った! テスト用 アプリケーション w/ BDD Framework 業務ロジックを実装する 1 気付く 3
  7. テスト対象を Public にせざるを得ない問題 テスト用アプリケーションから業務ロジックを探す 2 テスト用 eSpace eSpace 業務用 アプリケーション

    参照 業務ロジック アサーション 前処理/後処理 Pub った! テスト用 アプリケーション w/ BDD Framework 業務ロジックを実装する 1 気付く 3 悩む 4 え、でもそれってテストのた めにプロダクションコードの 実装に手を加えるってこと? そもそも可視性が2通りしか ないし公開したい Producer を指定するような仕組みがな いときついっていうかテスト 対象 Public にしていったら 関係ないのに使われる可能性 を否定できないし Public で あるべきでない Action も Public にしないとテストが できないの?まじかーそっか ー(超早口)
  8. テスト対象を Public にせざるを得ない問題まとめ BDD は OutSystems の仕組みに則った正規の手段で Action を実行する想定 OutSystems

    の可視性バリエーションは Private / Public の2種類のみ よって以下のような Private Action をテストしたい場合 Public にせざるを得ない - 1か所でしか使われていない完全 Private な Action - eSpace 内 Public な Action Public プロパティは実装の意図を伝えるための側面が強い(個人差があります) そのため、テスティングフレームワークの影響で強制されるのは違和感がある
  9. テスト対象を Public にせざるを得ない問題 テスト用 eSpace eSpace テスト用 アプリケーション w/ Testing

    Framework 業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 さぁ 実装だ!
  10. テスト用 eSpace eSpace 業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 業務ロジックを実装する

    Pub った! 1 テスト対象を Public にせざるを得ない問題 テスト用 アプリケーション w/ Testing Framework
  11. よしテスト するぞ テスト用アプリケーションの何か一つを参照する 2 テスト対象を Public にせざるを得ない問題 テスト用 eSpace eSpace

    業務用 アプリケーション 参照 業務ロジック アサーション 前処理/後処理 Pub った! 業務ロジックを実装する 1 テスト用 アプリケーション w/ Testing Framework
  12. 楽だなー テスト対象を Public にせざるを得ない問題 テスト用アプリケーションの何か一つを参照する 2 テスト用 eSpace eSpace 業務用

    アプリケーション 参照 業務ロジック アサーション 前処理/後処理 Pub った! 業務ロジックを実装する 1 Private だろうが Public だろうが呼び出し放題!! 3 テスト用 アプリケーション w/ Testing Framework
  13. Testing Framework でのテスト実装 テスト対象:GetNextProductNumber Public:No 処理:Aggregate の結果 に +1 して返す

    まずは Public にする! そして SetUp で GetLastProduct がデ ータを取得できるデータを作成して、あ、 あとは意図しないデータがあったらエラ ーにするなり削除するなりしないとなー 副作用に注意しなくちゃな!
  14. Testing Framework でのテスト実装 テスト開始を宣言 1 テスト対象の Proxy を宣言 2 Mock

    クエリの結果を宣言 3 Mock クエリの結果をセット 4 Proxy 経由で Private Action を実行 5 アサーション 6
  15. Testing Framework でのテスト実装 テスト開始を宣言 1 テスト対象の Proxy を宣言 2 Mock

    クエリの結果を宣言 3 Mock クエリの結果をセット 4 Proxy 経由で Private Action を実行 5 アサーション 6
  16. OutSystems のテスティングフレームワーク特徴ざっくり Testing Framework テスト対象強制 Public やるしかない 黒魔術で解決 プロダクションコードに 入り混じる

    黒魔術で解決 Mocking 実装 プロダクトバージョン アップへの追従性 原理的に心配なし 破綻するかも Client Action 対応 あり なし BDD Framework
  17. 今日のまとめ BDD Framework は盤石な OutSystems 公式のテスティングフレームワーク 公式がサポートし、OutSystems でのテスティングの中心的存在であるが、 仕組み上「できないこと」や「できるけれどもやりづらい」ことが多々ある そんな中

    Testing Framework という選択肢が彗星のごとく現れた 「BDD でやりづらいことを C# を駆使した黒魔術で解決」している 公式サポートはゼロだが、ユニットテストの生産性向上に役に立つかも