-
Notifications
You must be signed in to change notification settings - Fork 169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CPPA::stdErrorのテストを追加するにあたっての課題共有 #1812
CPPA::stdErrorのテストを追加するにあたっての課題共有 #1812
Conversation
❌ Build sakura 1.0.4065 failed (commit 866dfb2c3c by @berryzplus) |
❌ Build sakura 1.0.4066 failed (commit ec4704f66f by @berryzplus) |
少し先走ってコミット積んでしまいました。 問題箇所はココです。 sakura/sakura_core/util/MessageBoxF.cpp Lines 59 to 61 in 90d6766
Windows API WriteConsoleW関数はコンソール専用なので、 個人的に「テストがしづらいコード」はそれ自体不具合だと思うので「#1362 の不備」として修正したらよい気がします。アプリの挙動には影響しない不具合なので「不具合修正」にはならんのですが。。。 |
✅ Build sakura 1.0.4067 completed (commit 0a11aedff0 by @berryzplus) |
✅ Build sakura 1.0.4069 completed (commit 4cd1b67e4f by @berryzplus) |
Code Smells対策、これはちょっと難しいかも。。。 |
SonarCloud Quality Gate failed. |
✅ Build sakura 1.0.4071 completed (commit abcd912bf4 by @berryzplus) |
PR の目的
タイトル通りです。
カテゴリ
PR の背景
CPPA::stdError
の単体テストを作ろうとしたら課題にブチ当たったので共有します。PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
CPPA::stdError
はPPA.DLL
がエラー時に呼び出す「コールバック関数」です。エラーコードとエラーメッセージを受け取り、
適切なメッセージを組み立てて「メッセージボックスに表示する」という仕様です。
「メッセージボックスに表示する」という処理は通常は「テスト不可」です。
メッセージボックスを表示するとスレッドがブロックされて先に進まなくなるためです。
実装した処理の正当性を確認できるようにするには、メッセージボックスを入れるべきでないです。
とは言え、既存コードのメッセージボックス表示を削って回るわけにもいかないので、
以前「メッセージボックスを表示するパスがあっても自動テストができる仕組み」を作り込みました。(#1362)
単体テストの一部として動く場合(正確には標準エラー出力が存在する場合)、
メッセージボックスに標準エラー出力(STDERR)に吐かれるようになっています。
CPPA::stdError
は「Err_CD=0:PPAのエラー」時に「Err_Msg」をそのままメッセージボックスに表示します。gtest
は標準エラー出力(std::cerr
)に吐かれた文字列をキャプチャできます。#1362 の機構がちゃんと動いていれば、単体テストを作れるはずです。。。(要するに、動いてないんです。)
PR の影響範囲
テスト内容
テスト1
手順
関連 issue, PR
#1811
#1722
#1362
参考資料
https://gongo.hatenablog.com/entry/20110516/1305548031