ステップ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 としました。
この記事は参考になりましたか?
- 実例で学ぶ、コード品質の高め方連載記事一覧
-
- どうやってコード品質を上げるのか? 実例で学ぶリファクタリング
- どうやってコード品質を測るのか? ソースコード品質の測定指標とその活用
- なぜ今、コード品質が求められるのか? ChatGPT時代を生き残るためのエンジニアの基礎ス...
- この記事の著者
-
浅原 明広(株式会社Sider)(アサハラ アキヒロ)
日本IBM、株式会社フィックスターズなどで、半導体製造装置や医療画像機器など、大小様々な組み込み製品向けのソフトウェア開発プロジェクトに従事。 現在、フィックスターズ子会社の株式会社Sider にて、ソースコードのコピペ管理ツール『CloneTracker』を開発・提供。最新のツールや方法論を用いた、ソフトウェア開発者体験の向上に強い関心を持つ。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
千葉 滋(東京大学情報理工学系研究科教授)(チバ シゲル)
東京大学 情報理工学系研究科 創造情報学専攻 教授
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
