Google TestとMockを使う

前回に引き続きgoogle testを扱う。 googletestの基本的な使い方 googletestをプロジェクトへ簡単に導入するには、CMakeを使う(前回のエントリ)のが一番楽だと思う。 基本的にはTEST()マクロを使うことでテストを作っていく。 TESTマクロは、第一引数にtest_case_name、第二引数にtest_nameを置く。 注意としては、テストケース名、テスト名にはアンダースコア(_)を使ってはいけない。参考 これは、C++の予約語やgoogletestが生成するテストクラスがtestcasename_testnameのようになるためらしい。 さて、テスト対象から出力される結果の判定については、ASSERT_やEXPECT_を使う。 例えば、掛け算の結果を返す関数のテストは下記のように行う。 int32_t TimesCalc(int32_t a, int32_t b){ return a * b; } TEST(TestTips, BasicAssertions) { EXPECT_EQ(TimesCalc(7,6), 42); } 判定の種類は数値のequal以外にも、not equal、less/grater thanなどももちろんあるし、文字列比較もある。 Test Fixture 各テストケースで同じような処理(データセットやリソースの確保など)を書く場合はフィクスチャクラスとしてまとめられる。これが地味に便利。 後でまた出てくるが、例えばMockクラスを用意して、テスト対象とは関係ないが値の設定などを行わなければいけない場合などに使っている。 class CommunicatorTest: public ::testing::Test{ protected: virtual void SetUp(){ mock_connector = new MockConnector; communicator = std::make_unique<Communicator>(mock_connector); } virtual void TearDown(){ delete mock_connector; } std::unique_ptr<Communicator> communicator; MockConnector *mock_connector; }; TEST_F(CommunicatorTest, fixtureTest){ EXPECT_TRUE(true); } 上はとりあえずリソースの確保と破棄をフィクスチャクラスとしてまとめている(このレベルはいらないと思うし、new/deleteやunique_ptrを使っていたり普通はない) さっきまで使っていたTESTマクロがTEST_F、test_case_nameがフィクスチャクラスに変わっている。 TEST_Fマクロでは最初このテストが実行されるときにコンストラクタまたはSetUp()が実行され、テストのスコープが最後まで実行されるとデストラクタまたはTearDown()が実行される。 Mock テストしたい関数が別の関数を読んでいて、その結果を持って処理がされる実装はある。 単体レベルに切り分けることが良いにしても、組み込みや機器とのコミュニケーションを賄う機能の場合はなおさらだ。...

July 27, 2024 · Last updated on July 27, 2024 · 2 min · rrrrrrryo

CMakeとVSCodeでGoogleTest

ここ半年くらいはC++のお仕事をしています。 Unit Testってやりますよね?(部署にもよる気がしますが普通しますよね、色々なパターンがあると思いますが、デバッグモードでステップ実行して単体テストですと言われた時は目を強く瞑りました。。。) C++では、Visual Studioの単体テストフレームワーク、CTest、Catch2などなどあると思いますが、僕はGoogle Testが好きです。 テストが作りやすい、Mockがすごく便利だなと思います。後Visual StudioやVSCodeにTest AdapterがあるのでWindowでもLinuxでもテスト管理が簡単な気がします。 今回は、最近WindowsとLinux両方でコードを使い回してあげる必要が出てきたため、CMakeで環境を作るようにしています。 その際に初めてCMakeでGoogle Testの環境を作りましたので備忘録として残します。また、VSCodeのC++ Test Adapterもとてもよかったのでメモしておきます。 以下のことは書きません CMakeのインストール方法 CMake記法の詳細 Google Testの詳細 Google Testについてはまた別に書き残したいです。 CMakeでGoogle Testを使う単体テストプロジェクトを作る googletestのgithubリポジトリは割とドキュメントが充実しています。 GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework GoogleTest - Google Testing and Mocking Framework. Contribute to google/googletest development by creating an account on GitHub. プロジェクトの構成はこんな感じ proj |- CMakeList.txt |- test_sample.cpp |- build/ CMakeList.txtはこんな感じです。 cmake_minimum_required(VERSION 3.28) project(gtest_sample VERSION 0.1.0 LANGUAGES C CXX) include(FetchContent) FetchContent_Declare( googletest # Specify the commit you depend on and update it regularly....

February 16, 2024 · Last updated on February 16, 2024 · 1 min · rrrrrrryo

育休が終わりました

2023年の12月中旬から育休をとっていました。そして、2024年2月から職場に復帰します。 雑記として、感想と役に立ったことを書き留めておきます。 育休を取得して 我が家の子は、少し小さめに産まれました。そのため、最初の1、2週間は不安のある育児でした。 体重はしっかり増えるか。とにかくミルクを時間通りにあげるように心がけるも、あまり量を飲んでくれない日が続いたため、子にも負担をかけたかも知れません。 2週間が経過する頃には、少しずつミルクを飲む量が増えてきて、なんとか3000gを越すことができ、その後は順調に体重も増加して行きました。 よかった。 育休を取得して本当によかったと思います。(もう少し取ればよかった。) 少し疑問に残っているのは、12月の賞与に対しての社会保険料関係。会社に行ったらしっかり確認しようと思います。 役に立ったツールとか ツール類に結構助けられました。 ピヨログ 子どもの管理、妻との共有 育児記録アプリ ぴよログ 夫婦で共有できる無料育児記録アプリ。片手のかんたん操作で赤ちゃんの育児記録をつけられます。授乳タイマー機能やまとめ機能、成長曲線機能なども備えています。AIアシスタントにも対応! Notion 子どものページを作って、困っていること、心配な症状、必要なものを妻と共有できるようにしました。 作るきっかけは年始にこれを見て Notion で2024年のダッシュボード作ってみた | DevelopersIO 目指せ、毎日ひらきたくなるダッシュボード 鼻吸い器 絶対電動が良いです。少し高いけど買ってよかった。 加湿器 象印の手入れ簡単なやつ買いました。とってもよい。エアコン常に稼働なので必須 他にも色々買いました。 おわりに 育休は終わってしまいますが、育児は終わりません。 変わらず、交代制で夜もミルク! 子ども可愛い!

February 1, 2024 · Last updated on February 1, 2024 · 1 min · rrrrrrryo

google search consolへindex登録をする

私のドメインはWebではないので、かなり初心者です。 最近ドメインを取得して、ブログを公開してよしよしと思っていましたが、ふとgoogle検索で自分のブログ出てくるのか気になりました。 早速検索をすると、全く出てきませんでした。 あれー、と思って色々調べると、とりあえずGoogleのIndexに入っていないと検索に引っかからないと言うことがわかりました。 今回はGoogle Search Consoleでgoogle indexに登録してもらう備忘録を残します。 やっていく! 恥ずかしながら、そもそもこんなサービスがあることを知りませんでした。 まずGoogle Search Consoleに入ります。おそらく、Googleアカウントがあれば問題なくログインできます。 ログインし、初めての場合はおそらくまず以下の画面が出てきます。 (私は既に弊ブログ登録してしまったので、rrrrrrryo.devが登録されている) 今回は、ドメイン以下サブドメインも全て登録できるように、”ドメイン”へ、自分が取得しているドメインを入力して続行を押下します。 CloudFlareの場合、dnsへの登録は連携して自動で行なってくれるようでした。 ドメインのプロパティページが作成されます。以下画面で検索バーに登録したいWebページのURLを入力し検索します。 URLがGoogle Indexに登録されているか検索することができるようです。 登録されていなかった場合、”インデックス登録をリクエスト”から登録のリクエストを送ります。 審査?後、登録のキューに入れられて、しばらくすると登録になるようです。 以上これで、登録が完了すると、GoogleのクローラーがWebページを見てくれるようになります。 ついでに ついでに、sitemapの登録までやっておきます。 サイトマップはGoogleによると以下のように使用されるみたいです。 サイトマップとは、サイト上のページや動画などのファイルについての情報や、各ファイルの関係を伝えるファイルです。Google などの検索エンジンは、このファイルを読み込んで、より効率的にクロールを行います。サイトマップはサイト内の重要なページとファイルを Google に伝えるだけでなく、重要なファイルについての貴重な情報(ページの最終更新日やすべての代替言語ページなど)も提供します。 左側の”インデックス作成 > サイトマップ”のページでsitemapのパスを登録します。 hugoではビルド時にルートへサイトマップも作ってくれるのですごく簡単です。 おわりに 以上で、Googleへ自分のWebサイトを登録することができたようです。 特に検索上位に来てほしいとかはないのですが、やってみようと言うモチベーションで始めましたがかなり楽でした。 とくに詰まることもなくサクッとできたので少し拍子抜けでしたが、ユーザー体験がすごく良く感動しました。

January 27, 2024 · Last updated on January 27, 2024 · 1 min · rrrrrrryo

タムパと刺激、ミーハー

最近以下のような記事がXのTLに流れてきました。 脱タムパ的思考論ー「言語化がスゲぇ」が実は全く凄くない理由。|Kenji Tomita / 冨田憲二 今はタムパ(タイムパフォーマンス)の時代と言われて久しい。特に若い世代(Z世代)を中心に「消費コンテンツの短尺化」という視点から全方位的な行動心理へ拡張されている。つまり、コンテンツを起点にあらゆる物事に人類が向き合う「態度」がせっかちになっているのである。これはいわゆる若者だけには留まらない生活・思考トレンド的な様相を呈している。このトリガーとなっているの言うまでもなくネット、スマホ、ショート動画の流れにある。 何はともあれ、信号待ちやエスカレーターでも手元のスマホでコンテンツを消費できる現代人が、より短い時間で完結する消費行動に収斂されていくのは行動心理学的にも自明であり、背景で 短時間で得られる刺激から距離を置く 身近な人がデジタルデトックスをやるということを聞き、自分もこれは必要かもしれないかもなと感じたため、自分なりにデジタルデトックスもどきを実践 読んでみて、興味深かったので備忘録として残しておきます。 最近の自分 近年の自分の性格を一言で表すと"ミーハー"が適切に思います。 ミーハーとは ミーハーとは、特に興味など持っていなかった物事が世間的に流行しはじめた途端に飛びつくような者を指す表現。わかりやすくいうと、流行っているからという理由で飛びつく流行物好きな存在のことである。 よくよく思い返してみると昔はそうでもなかった、流行なんてクソ食らえだった気もします。 なんとなくモヤモヤした気持ちがありました。 自分が流行に乗っているのかはさて置き なんでこんなに流行に敏感になってしまったのか 少し過敏になりすぎていないか 深く考え事をしたいのに流されていないか あえて"言語化"するとこんな感じなのかなと思います。 さて、なんでこんなことを急に考えるようになったのかと言うと、おそらく親になったからです。 これは本当にすごい。自分のことだけでなく、家族のことを考えるようにほぼ強制的に思考が多角的になった気がします。 短時間の刺激、インスタントなコンテンツ 上記記事12で気になった文を引用します。 短時間で得られる刺激を摂取しすぎてしまっていることによって感じていた弊害は以下です。 理解できるとか面白さを感じるとか、何らかの結果や刺激を得られるまでに時間がかかるということに対する耐性が減る 手軽に得られる面白さに慣れて、自分の感性に本当に響くものに対するアンテナの感度が鈍ってしまう あらゆる物事にインスタントに触れ、大して考えもせずに「分かった」つもりになる。スマホで消費するコンテンツ自体がインスタント主流であり、隙間時間でタイパを求める行動心理が促進される。ゆえに「分からない」や「知りたい」に対してじっくりと向き合うような知的態度は現代の行動様式に則ると徹底的に排除される構造にある。 自分はSNSやショートコンテンツに依存しすぎていると改めて気づきました。 感覚的に、ソフトウェアエンジニアは特にショートコンテンツに対する依存が高いように思います。 それは、日々更新される技術を追いかけたり、アジャイル的な業務をこなしていくために醸成された能力でしょう。 しかし、本当に必要で深掘りしないといけない時にも"わかった気になる"で終わってしまうのは、すごく残念です。 とても良い気づきになりました。 おわりに 今回の気づきを今年の具体的なアクションとして示すことで締めたいと思います。 本を読む SNS、YouTube shortの時間を制限する ブログを続ける 月並みな目標になってしまいましたが、結局は落ち着いて深く考える時間をとることが重要なのかなと。 短時間で得られる刺激から距離を置く piyopanman.dev ↩︎ 脱タムパ的思考論 Kenji Tomita ↩︎

January 25, 2024 · Last updated on January 25, 2024 · 1 min · rrrrrrryo