0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ceedlingで始めるC言語の単体テスト自動化

0
Posted at

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を実行してみてください。小さな対象から始めると、設定と実行の流れをつかみやすくなります。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?