ステップ5:単体テストの追加
切り出したcalculateTotalAndAverage関数に対してテストコードを用意しましょう。プログラミング言語ごとに便利なテスト実行ツールがあると思います。今回はC++ですので、Google Testを利用した例を紹介します。Google Test はGitHubのリポジトリ上に豊富なドキュメントがありますが、日本語の情報は限られているようなので、ここで簡単に導入方法を説明しておきます。
ソースコードをダウンロードします。2023年11月5日時点での最新バージョンはv.14.0です。
$ cd /tmp $ wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz $ tar xvfz v1.14.0.tar.gz
cmake を使ってビルドします。
$ cd googletest-1.14.0 $ mkdir build $ cd build $ cmake .. $ make
システムにインストールします。管理者権限(sudo)が必要です。
$ sudo make install
wgetやcmakeがインストールされていない場合は、最新版をインストールしてください。MacOS環境であれば、brewコマンドでインストールできます。
$ brew install wget $ brew install cmake
Google Testを利用したテストコードは例えば以下のようになります。
//calculateTotalAndAverageTest.cpp////////////////////////////////////////
#include <gtest/gtest.h>
#include "calculateTotalAndAverage.h"
// 正の価格値のテスト
TEST(CalculateTotalAndAverageTest, HandlesPositiveValues) {
std::vector<double> prices = {29.99, 34.99, 24.99, 19.99};
double total, average;
std::tie(total, average) = calculateTotalAndAverage(prices);
EXPECT_DOUBLE_EQ(109.96, total); // 合計が正しいか
EXPECT_DOUBLE_EQ(27.49, average); // 平均が正しいか
}
// 空のリストのテスト
TEST(CalculateTotalAndAverageTest, HandlesEmptyList) {
std::vector<double> prices = {};
double total, average;
std::tie(total, average) = calculateTotalAndAverage(prices);
EXPECT_DOUBLE_EQ(0.0, total); // 合計が正しいか
EXPECT_DOUBLE_EQ(0.0, average); // 平均が正しいか
}
// 単一価格値のテスト
TEST(CalculateTotalAndAverageTest, HandlesSingleValue) {
std::vector<double> prices = {49.99};
double total, average;
std::tie(total, average) = calculateTotalAndAverage(prices);
EXPECT_DOUBLE_EQ(49.99, total); // 合計が正しいか
EXPECT_DOUBLE_EQ(49.99, average); // 平均が正しいか
}
// 負の価格値を含むリストのテスト
TEST(CalculateTotalAndAverageTest, HandlesNegativeValues) {
std::vector<double> prices = {-10.0, 20.0, -30.0, 40.0};
double total, average;
std::tie(total, average) = calculateTotalAndAverage(prices);
EXPECT_DOUBLE_EQ(20.0, total); // 合計が正しいか
EXPECT_DOUBLE_EQ(5.0, average); // 平均が正しいか
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
テストを実装したら、先ほどのコードに対してテストを実行し、テストがパスすることを確認しましょう。単体テストを実行するには、まずテストコードを含むソースファイルをコンパイルして、テスト実行ファイルを作成する必要があります。以下の手順でテストをビルドして実行できます。
1. テストファイルのコンパイル
テストファイルをコンパイルするには、次のようなコマンドを使用します。
g++ -std=c++14 -o calculateTotalAndAverageTest calculateTotalAndAverageTest.cpp calculateTotalAndAverage.cpp -lgtest -lgtest_main -pthread
このコマンドは、-std=c++14を使用してC++14標準でコンパイルし[*2]、Google Testライブラリ(-lgtest -lgtest_main)とpthreadライブラリをリンクしています。これにより、calculateTotalAndAverageTest という実行ファイルが生成されます。
2. テストの実行
ビルドプロセスが成功したら、次のコマンドでテストを実行できます。
./calculateTotalAndAverageTest
このコマンドはテスト実行ファイルを実行し、Google Testがテストケースを自動的に見つけて実行します。テストの結果はターミナルに表示されます。
[*2] 当初は C++11 でビルドしようと思ったのですが、Google Test の最新版ライブラリはC++14以上のバージョンを要求していたので、やむなくC++14 としました。
