C言語の単体テストでは、テストコードを書く以外にも、コンパイル、リンク、実行、結果の確認が必要です。テストが増えると、その手順を管理する負担も大きくなります。
Ceedlingは、これらの作業をまとめて自動化する、C言語向けのテスト用ビルドシステムです。 本記事では、その役割と基本的な使い方を紹介します。
Ceedlingは何をしてくれるのか
Ceedlingを使うと、次のコマンドでテストのビルドから実行、結果の集計まで進められます。
ceedling test:all
内部では、テストファイルの収集、テストランナーの生成、コンパイル、リンク、実行を行います。テストランナーとは、各テスト関数を呼び出すためのプログラムです。通常、利用者がテスト用のmain関数を書く必要はありません。
Ceedlingには、判定を担当するUnityと、モック生成を担当するCMockが組み込まれています。Ceedling自身の役割は、それらとコンパイラを連携させ、テストを実行できる形に整えることです。Ceedling公式紹介
基本的な始め方
RubyとGCCなどのCコンパイラが利用できる環境を用意し、Ceedlingをインストールします。
gem install ceedling --no-document
続いて、プロジェクトを作成します。
ceedling new sample
cd sample
基本となる構成は次のとおりです。
sample/
├─ src/ テスト対象のCソースとヘッダー
├─ test/ テストコード
└─ project.yml Ceedlingの設定
srcにテスト対象、testにテストコードを置き、ceedling test:allで実行します。プロジェクトを作成しただけでは、確認したい振る舞いのテストは用意されないため、自分で追加します。公式インストール手順
設定の中心はproject.yml
Ceedlingの設定は、基本的にproject.ymlへまとめます。ソースやテストの場所、使用するツール、コンパイル条件などを指定するファイルです。
例えば、探索するフォルダーは次のように設定できます。これは設定の一部分なので、生成されたproject.ymlの対応箇所を編集します。
:paths:
:test:
- +:test/**
- -:test/support
:source:
- src/**
:include:
- src/**
:support:
- test/support
ここでは、test配下からテストを探し、補助コードを置くtest/supportをテストの探索対象から除外しています。
既存プロジェクトへ導入する場合も、まずソースとテストの配置に合わせて設定を調整します。公式設定リファレンス
普段使うコマンド
最初は、次の操作を覚えておけば十分です。
| コマンド | 用途 |
|---|---|
ceedling test:all |
すべてのテストをビルドして実行 |
ceedling test:hello |
test_hello.cに対応するテストを実行 |
ceedling clean |
ビルド生成物を削除 |
変更中は対象のテストだけを実行し、変更をまとめる前に全体を実行すると、確認を進めやすくなります。公式コマンド説明
導入すると何が楽になるか
Ceedlingの利点は、テストを繰り返すための手順を統一できることです。
開発者はテスト対象と期待結果を書くことに集中でき、ビルドや実行の手順はCeedlingに任せられます。同じコマンドをCIでも利用すれば、変更のたびにテストを実行する運用へつなげられます。
まずは依存の少ないCの関数を一つ選び、テストを追加してceedling test:allを実行してみてください。小さな対象から始めると、設定と実行の流れをつかみやすくなります。