LoginSignup
1
1

More than 1 year has passed since last update.

「テスト駆動開発」をC++で写経するためのCatch2によるテスト実行環境構築

Posted at

はじめに

テスト駆動開発の写経をC++でやりたい。
そのため、今回は以下のようなテスト環境の構築方法について説明する。

  • Catch2を使ってテストを書く
    • 選定理由:個人的に使っているOpenSiv3Dというフレームワークで使われてて自分も使ってみたくなった
  • Visual Studio上でテストを実行する

最終的にこんな感じ:リポジトリ

プロジェクトの作成

テスト対象のプロジェクトcpp-tddもテストを書くプロジェクトtestも、同じソリューションの中にコンソールアプリとして作る。
visualstudio_新しいプロジェクト.PNG
こんな感じの構成になる。
visualstudio_テストプロジェクト_ソリューションエクスプローラー.PNG

Catch2のヘッダーを配置する

Catch2の現時点(2023/5/3)最新バージョンはv3だが、シングルヘッダーのライブラリを使いたいのでv2を使う。
デフォルトブランチであるdevelブランチは最新バージョン(v3)なので、v2.xブランチに切り替えてcatch.hppをとってくる。
これをテストプロジェクトのディレクトリ配下に配置。

テストプロジェクトの下準備

以下のコードだけ書かれたTest.cppを用意する。

Test.cpp
#define CATCH_CONFIG_MAIN
#include "catch.hpp"

これでmain()を自動的に作ってくれる。
自動生成されるmain()では、テスト実行時のコマンドライン引数を受け取る、みたいなことをやってくれてるみたい(参考)。

実際にテストを書く

「テスト駆動開発」の第1章を参考に書いていく。
テスト対象のクラスDollar

cpp-tdd/Dollar.hpp
#pragma once

namespace money {
	class Dollar {
	public:
		int amount;
		Dollar(int amount) {
			this->amount = amount;
		}
		void times(int multiplier) {
			amount *= multiplier;
		}
	};
}

テストを実行するコード:

test/MoneyTest.cpp
#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でテストを実行できる。
catch2_pass.PNG
これでテスト環境はできあがり!

おまけ:includeを楽に書く

テスト対象ファイルをincludeするとき、パスの指定がめんどくさい。

#include "../cpp-tdd/Dollar.hpp"

以下のように書きたい。

#include "Dollar.hpp"

手順は以下の通り。
ソリューションエクスプローラーからテストプロジェクトを右クリック、プロパティを開く。
「VC++ ディレクトリ」→「インクルードディレクトリ」、プルダウンから「編集」、「新しい行を追加」で$(SolutionDir)/cpp-tddを追加する。
visualstudio_インクルードディレクトリ.PNG
これでソリューションのルートにあるcpp-tddディレクトリ直下から直接includeできる。

まとめ

Catch2でテストを書くための環境構築の手順について説明した。
最終的なファイル構成はこちら:リポジトリ

参考

Visual Studio 2019でCatchを使ったC++単体テストを実現する - Gaming Life (hatenablog.com)
C++テンプレートの学習にstatic_assertだけで『テスト駆動開発』多国通貨を写経する - Qiita
VisualStudioのincludeファイルパス設定について - Qiita

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1