Catch2で気軽にテストかける環境@Visual Studio 2019

忘れないうちに殴り書きしておこうと思います。

C++ のユニットテスト用フレームワークは Google Test とか iutest とか Catch2 とか色々ありますが今回は Catch2 を使ってみることにしました。ヘッダオンリーでお手軽みたいです。

テスト用プロジェクトの作成~実行

まず公式からヘッダファイルをダウンロードしておきます。

次にテスト用のプロジェクトを作ります。「Windows コンソールアプリ」でいいでしょう。作ったら、テストしたいライブラリを使う準備をします(インクルード ディレクトリとかライブラリ ディレクトリの設定をする)。

プロジェクトの設定が終わったら、テストを書いていきます。

Test_mystring.cpp

#define CATCH_CONFIG_MAIN  //main()はCatch2が作ってくれる
#include <Catch2/catch.hpp>  //環境に合わせて

#include <mystring.hpp>

TEST_CASE("upper()", "[mystring]")
{
    REQUIRE(mystring::upper("abc") == "ABC");
}

でビルドして実行すると、テストの結果が出てくると思います。

テストエクスプローラを使いたい

一応テストができるようになりましたが、いちいちテスト用プロジェクトのビルドして実行して・・・とやるのは面倒なので、Visual Studio のテストエクスプローラ ウィンドウを使ってテスト開始~結果の確認までやりたいです。そこでまず Test Adapter for Catch2 拡張機能をインストールします。

次に .runsettings ファイルを以下の通り作って、ソリューションのルートに置いておきます。テストを書いてあるソースのファイル名が FilenameFilter にマッチするように名前を付けておきます。

.runsettings

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <Catch2Adapter>
        <FilenameFilter>^Test_</FilenameFilter>
    </Catch2Adapter>
</RunSettings>

そしてテストエクスプローラの「設定」→「実行設定の構成」→「runsettings ファイルの選択」からこのファイルを選択します(自動検出でもいい)。

で、ソリューションをリビルドするとテストが検出されて、テストエクスプローラ上に出てくると思います。これで、このウィンドウの「実行」ボタンをワンタッチでテストのビルド~実行~結果の確認までできるようになりました。

こんなかんじ

以上です

なんか抜けてるかもしれない。

Windows エクスプローラのアドレスバーから Windows Terminal を起動したい

エクスプローラでフォルダを開いている状態で、アドレスバーに cmd と打ってエンターすると、そのフォルダがカレントフォルダになってコマンドプロンプトが開きます。これ便利でよく使ってます。

Windows Terminal でも同じノリでやりたいんですけど、アドレスバーに wt と打ってもカレントフォルダは変わらないです。

そこで、とりあえずこの一行を wtc.bat とかなんか適当な名前で保存します。

start wt -d .

で、パスを通しておけばいいです。

ですがこれだと毎回新規ウィンドウが開いちゃうので、タブの統合機能が待ち望まれるところです。一応 issue に上がっているみたいですが。Add support for tab tearoff and tab merge · Issue #1256 · microsoft/terminal

Gitのorphanブランチって初めて知りました

GitHub で README.md に画像貼りたいとき、いくつかやり方があります。(1) 外部サービスを使う、(2) GitHub の Wiki とか Issues にアップロードする、 (3) リポジトリ内で管理する・・・などなど。

個人的には、ドキュメントとかそれ用の画像もリポジトリに含めて管理したいので (3) かなと。それで master ブランチに全部突っ込んじゃっても別にいいんですけど、orphanブランチ(これまでの履歴を引き継がないブランチ)を作ってそこでドキュメント用の画像とかの資料だけ管理していくというやり方を知りました。全然知りませんでした。このやり方の方がすっきりしていて良いので使っていこうと思います。

続きを読む →

【WPF/MVVM】Windows用ツールを作るためにWPFを勉強した過程とか

先ほど公開した bmscorelogview ですが、これまで小物ツールを作るときに長らく使ってきた WinForms はやめて WPF でやってみよう、と決めて製作し、とりあえず公開できるところまでたどり着くことができました。そこで、今回 WPF を学習した過程や、役立った記事などを記録に残しておきたいと思います。

続きを読む →

「伝わるデザインの基本」を読んだ感想など

またまたお久しぶりの更新です。

……って、気付いたらもう 3 年も経っているんですね。恐ろしいことです。

一時期は小規模のゲームを量産していこうという気持ちが強く、いろいろ作ってゲームジャムなどに参加してみたりしていたのですが、最近はそういった創作活動もちょっとおろそかになっているところです。

ですがゲーム製作を辞めるつもりは今のところ全くないわけで、とりあえず今はネタを貯めつつ、よいタイミングで放出できたら、と思っています。


では本題の、タイトルについてですが。

先日ふらっと立ち寄った書店で目に留まった書籍なのですが、これは良い本だと思ったので紹介してみようかと。

続きを読む →

近況について (2016.8)

久しぶりの更新です。

Selene のサイトが消滅してしまってから結構経ちましたね。最近は、Siv3D というゲーム・メディアアート向けの C++ 用ライブラリを使って遊んでいます。最新の C++ に準拠した形で作られており、各機能がクラスに分けられていてとても使いやすいです。Siv3D Game Jam という不定期イベントにもちょくちょく参加したりして、LASERREIMU の時のように同人ゲームをがっつり作る感じではないですが、プログラムを書く機会をちょっとずつ増やしてみています。

Siv3D Game Jam へ投稿したプログラムは GitHub で公開しています
https://github.com/voidproc

それから普段プログラムを書いている中で便利だなと思ったちょっとしたプログラムは、GitHub Gist で公開するようにしてみました。その中でも Siv3D に関連するものに関しては、Siv3D ミニサンプル集 として別サイトにまとめていますので興味のある方はご覧になってみてください。

.

イベント参加見合わせなどについて

まだはっきりとは分からないのですが、来年度はちょっと慌ただしい感じになりそうでして、H26例大祭およびコミックマーケットへは参加を見合わせることにしました。
余裕が出てきましたら、他のイベントへ参加したりするかもしれませんが、とりあえずはそんな感じで。

LASERREIMU完成版の方は、さんげっとさん、およびメロンブックスさんの方にまだそこそこの在庫がありますので、欲しい方がいましたら、そちらからお求めください。

ツイッターを眺めているとたまにLASERREIMUの話題があったりして、こちらから全然反応できてないですが、プレイしてくださってるんだな~という感じでとても嬉しいです。
あとはバグ報告なんかもあったりして、大いにに助かっております、ありがとうございます。

C++で定義したenumをそのままの名前でLuaで使いたい(Boost.Preprocessor)

例えばC++で次のように列挙体を定義して、そのままの名前でLuaスクリプト側でも使いたいわけです。

enum Enum1 {
    E1 = 0x200,
    E2,
    E3,
    E4,
};

↓↓↓こう書きたい↓↓↓

if foo == E2 then
    bar()
end

でもそれをやるには、定義した列挙体を全部Luaのグローバル変数として登録しなければなりません。

luabind::object g = luabind::globals(L);
g["E1"] = E1;
g["E2"] = E2;
g["E3"] = E2;
…

enum定義した後で、Luaの方にも登録しなければなりません。
列挙体を1個増やすと、ソースを2箇所直さないといけない…。
これをいちいちやるのは、列挙体がたくさんあるととても面倒なので、なんとかならないものかと思っていたのですが、Boost.Preprocessorを使って楽になりそうだったので試してみました。

続きを読む →