はじめに
テスト駆動開発の写経をC++でやりたい。
そのため、今回は以下のようなテスト環境の構築方法について説明する。
最終的にこんな感じ:リポジトリ
プロジェクトの作成
テスト対象のプロジェクトcpp-tdd
もテストを書くプロジェクトtest
も、同じソリューションの中にコンソールアプリとして作る。
こんな感じの構成になる。
Catch2のヘッダーを配置する
Catch2の現時点(2023/5/3)最新バージョンはv3だが、シングルヘッダーのライブラリを使いたいのでv2を使う。
デフォルトブランチであるdevel
ブランチは最新バージョン(v3)なので、v2.x
ブランチに切り替えてcatch.hppをとってくる。
これをテストプロジェクトのディレクトリ配下に配置。
テストプロジェクトの下準備
以下のコードだけ書かれたTest.cpp
を用意する。
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
これでmain()
を自動的に作ってくれる。
自動生成されるmain()
では、テスト実行時のコマンドライン引数を受け取る、みたいなことをやってくれてるみたい(参考)。
実際にテストを書く
「テスト駆動開発」の第1章を参考に書いていく。
テスト対象のクラスDollar
:
#pragma once
namespace money {
class Dollar {
public:
int amount;
Dollar(int amount) {
this->amount = amount;
}
void times(int multiplier) {
amount *= multiplier;
}
};
}
テストを実行するコード:
#include "catch.hpp"
#include "../cpp-tdd/Dollar.hpp"
namespace money_test {
using money::Dollar;
TEST_CASE("multiplication") {
auto five = std::make_unique<Dollar>(5);
five->times(2);
REQUIRE(five->amount == 10);
}
}
F5でテストプロジェクトが実行されるようにする
ソリューションエクスプローラーからテストプロジェクトを右クリック、「スタートアッププロジェクトに設定」。
これでF5でテストを実行できる。
これでテスト環境はできあがり!
おまけ:includeを楽に書く
テスト対象ファイルをinclude
するとき、パスの指定がめんどくさい。
#include "../cpp-tdd/Dollar.hpp"
以下のように書きたい。
#include "Dollar.hpp"
手順は以下の通り。
ソリューションエクスプローラーからテストプロジェクトを右クリック、プロパティを開く。
「VC++ ディレクトリ」→「インクルードディレクトリ」、プルダウンから「編集」、「新しい行を追加」で$(SolutionDir)/cpp-tdd
を追加する。
これでソリューションのルートにあるcpp-tdd
ディレクトリ直下から直接include
できる。
まとめ
Catch2でテストを書くための環境構築の手順について説明した。
最終的なファイル構成はこちら:リポジトリ
参考
Visual Studio 2019でCatchを使ったC++単体テストを実現する - Gaming Life (hatenablog.com)
C++テンプレートの学習にstatic_assertだけで『テスト駆動開発』多国通貨を写経する - Qiita
VisualStudioのincludeファイルパス設定について - Qiita