Skip to content
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

CClipboard の単体テストをさらに追加する #1843

Conversation

kengoide
Copy link
Member

@kengoide kengoide commented May 8, 2022

PR の目的

CClipboard のうち、単体テストが可能な部分を網羅したテスト群をリポジトリに追加します。

カテゴリ

  • その他の問題

PR のメリット

  • CClipboard.cpp のカバレッジが約80%になります。

仕様・動作説明

static メンバ関数である CClipboard::GetDataType を non-static なメンバ関数に変更する差分を含みます。「static インターフェース」として宣言されていた関数ですが、CClipboard 外での使用例がなく、仕様を変更しても問題にならないものと判断しました。

関連 issue, PR

#1707, #1800

kengoide added 3 commits May 8, 2022 14:23
* EnumClipboardFormats, GlobalAlloc, GlobalLock の呼び出しを仮想メンバ関数でラップする。
* GetDataType を private で non-static なメンバ関数に変更する。
@kengoide kengoide marked this pull request as draft May 8, 2022 06:00
@AppVeyorBot
Copy link

Build sakura 1.0.4130 completed (commit 0f6ecc3ddb by @k-kagari)

@sonarqubecloud
Copy link

sonarqubecloud bot commented May 8, 2022

SonarCloud Quality Gate failed.    Quality Gate failed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

52.2% 52.2% Coverage
0.0% 0.0% Duplication

@kengoide
Copy link
Member Author

kengoide commented May 8, 2022

Replace this use of "void *" with a more meaningful type.

API 関数の定義を踏襲したものですので対応しません。

カバレッジについては追加コード分が52%ということですね。マージ後のファイル全体の数値では80%になると思います。

@kengoide kengoide marked this pull request as ready for review May 8, 2022 06:29
@AppVeyorBot
Copy link

Build sakura 1.0.4131 completed (commit de9e391166 by @k-kagari)

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題なさそうに見えます。

今回の変更で、CClipboard::CClipboard(HWND hwnd) がテストでは呼ばれなくなったので、別の機会に OpenClipboard関数 もモック化してテスト可能にできたらいいな、と思います。

}

LPVOID CClipboard::GlobalLock(HGLOBAL hMem) const {
return ::GlobalLock(hMem);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

カバレッジが想定より低いのは、API呼出をモック化するために追加したこれらのメソッドがテストで実行されないためと考えられます。(テストで動くのはモックコードだから、ここは動かない)

テストではクリップボードのAPIを呼ばないようにして、クリップボードが勝手に書き換わる事態を回避しよう!で始めた対応なので、APIを呼ばないこと自体は気にしなくて良い認識です。

「CClipboardクラスのテストカバレッジ」を考えたときに、「テストで実行されないメソッドがある」の状態なので、何か対策したほうがいいような気はします。(というか、ちょっと自分でやりたいです:smiley:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

「CClipboardクラスのテストカバレッジ」を考えたときに、「テストで実行されないメソッドがある」の状態なので、何か対策したほうがいいような気はします。(というか、ちょっと自分でやりたいです😃

対策としては別のクラスに実装してコンストラクタで注入するといったところでしょうか? そういう手法の方がモックの作り方としては一般的らしく、設計を再考してもいいかもしれませんね。何かこの件で案があればぜひお知らせください。

Copy link
Contributor

@berryzplus berryzplus May 9, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

対策としては別のクラスに実装してコンストラクタで注入するといったところでしょうか?

テスト導入のときに書いた気がするんですけど、
APIラッパー部分をCClipbordApiとかの別クラスに分割してあげれば、
CClipboardクラスのカバレッジは限りなく100%にできます。
実装コードの検証をしたいのは独自に組んだロジックだけなので、とりあえずソコが目標になるはず。

コンストラクタで注入(=依存関係の逆転)は、やれたらカッコイイですね。
サクラエディタのWinMainはDIを実装できるほど簡潔でないように思います。
問題点「WinMainが簡潔でない」の対策は大変なので、当面は放置ですかね...。

@kengoide
Copy link
Member Author

kengoide commented May 8, 2022

レビューありがとうございます。マージします。

@kengoide kengoide merged commit fd67590 into sakura-editor:master May 8, 2022
@kengoide kengoide deleted the feature/more-tests-for-cclipboard-redux branch May 8, 2022 08:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants