diff --git a/Dockerfile.devtools b/Dockerfile.devtools index d501db0..6d812f8 100644 --- a/Dockerfile.devtools +++ b/Dockerfile.devtools @@ -6,7 +6,7 @@ RUN apk add --no-cache \ doxygen \ graphviz \ cppcheck \ - clang-extra-tools # clang-tidy を含む + clang-extra-tools # clang-tidy を含む # 作業ディレクトリを設定 WORKDIR /work diff --git a/Dockerfile.testtools b/Dockerfile.testtools new file mode 100644 index 0000000..c27f3cd --- /dev/null +++ b/Dockerfile.testtools @@ -0,0 +1,19 @@ +FROM debian:stable-slim + +RUN apt update && apt install -y \ + build-essential \ + libgtest-dev \ + cmake \ + git \ + python3 \ + wget + +# GoogleTest をビルド(Debianはヘッダだけなので手動ビルドが必要) +RUN cd /usr/src/gtest && \ + cmake CMakeLists.txt && \ + make && \ + cp *.a /usr/lib + +WORKDIR /work + +ENTRYPOINT [] diff --git a/readme/develop.md b/readme/develop.md index be0ef75..5eaadca 100644 --- a/readme/develop.md +++ b/readme/develop.md @@ -8,6 +8,7 @@ - [clang-tidy の使い方(C++向け)](#clang-tidy-の使い方c向け) - [ccppcheck の使い方(C / C++ 両対応)](#ccppcheck-の使い方c--c-両対応) - [テスト](#テスト) + - [テスト環境を構築する](#テスト環境を構築する) - [Doc(ドキュメンテーション)](#docドキュメンテーション) - [環境構築](#環境構築) - [Dockerを活用する](#dockerを活用する-1) @@ -137,7 +138,46 @@ cppcheck --enable=warning,style,performance,portability src/ ## テスト -TODO: TBD +テストフレームワークの選定 + +* **C** + * Unity: + * 最軽量・C専用 + * C言語の組込み開発でもよく使われる + * シングルヘッダに近い軽量テストツール + * doctest / googletest の C版のような位置付け + * CMocka: Unity より“しっかりしたテスト”をしたいときに最適 + * Criterion: C言語でも“近代的なテスト開発”をしたい場合に良い +* **C++** + * GoogleTest: + * C++テストで最も使われる + * 機能が豊富:モック、パラメトリック、DeathTestなど + * Catch2: シンプルで読みやすいテストを作りたい人向け + * doctest: 個人開発や高速実行が必要なプロジェクトに最適 + +### テスト環境を構築する + + +* Unity(C言語の軽量テストフレームワーク)はパッケージとして提供されていません。https://github.com/ThrowTheSwitch/Unityから必要なファイルをダウンロードして使う +```sh +# unity.c,unity.h,unity_internals.h +git clone https://github.com/ThrowTheSwitch/Unity /opt/unity +``` +* Alpine(musl libc)ではGTestのABIが合わず、gtest が正常にビルドできないケースが多い +* doctestとCatch2は普通にビルドで使えます + + +[Dockerfileはこちら](../Dockerfile.testtools) + + +テスト用のDockerイメージをビルドする + +```sh +docker build -f Dockerfile.testtools -t c-test-tools . +``` + + + ## Doc(ドキュメンテーション)