Faction

提供: ArchWiki
2018年4月12日 (木) 20:55時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:フレームワーク en:Faction '''Faction''' はテスト駆動開発のための C ライブラリです。 == インストール == {{AUR|libfactio...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Faction はテスト駆動開発のための C ライブラリです。

インストール

libfactionAUR パッケージをインストールしてください。

使用方法

ライブラリにはテストを素早く書くための C マクロが複数含まれています。

  • FI (Faction Initialization)
  • FT (Faction Test)
  • FC (Faction Close)

FT マクロを使うときは3つのフィールドが必要です。

  • AUTHORS() にはダブルクォーテーションで囲った作者の名前をカンマで区切ったリストで指定します。
  • SPEC() にはシングルクォーテーションで囲ったテストの説明を記入します。
  • C の boolean 表現 (C assert マクロと同じように使います)

基本的にはテストするコードが含まれているソースファイルの末尾に Faction のテストを記述します。テストは FACTION マクロガードで囲ってください (下の例を参照)。そうすることでコンパイル時に有効化・無効化できます。GNU C Compiler (GCC) などの C コンパイラはコマンドラインでマクロを有効にすることができます ( -D フラグ)。

サンプル

/* This is the function to be tested */
int
increment(int input)
{
   return (input + 1);
}

#ifdef FACTION
#include <faction.h>
#include <limits.h>
FI

  FT(
    AUTHORS( "timetoplatypus" ),
    SPEC( "increment() returns 1 when given 0" ),
    increment(0) == 1
  );

  FT(
    AUTHORS( "timetoplatypus" ),
    SPEC( "increment() returns 0 when given the largest integer value" ),
    increment(INT_MAX) == 0
  );

FC
#endif

gcc <filename.c> -D FACTION でコンパイルすることができます。

モード

Faction はコンパイルするときに2つのモードが存在します: minimal モードと extended モードです。

上の例ではミニマルモードで Faction をコンパイルしています。ミニマルモードでは3つのライブラリに依存します: stdlib, stdio, getopt。拡張モードではさらに依存ライブラリが増え、一部の関数は GNU 機能検査マクロでしか使えません。

拡張モードでコンパイルするときは、ファイルの一番上に GNU 機能検査マクロを定義してください。例えば、上記のサンプルは拡張モードでコンパイルすると以下のようになります:

#ifdef FACTION
#define _GNU_SOURCE
#endif
/* This is the function to be tested */
increment(int input)
{
  return (input + 1);
}

#ifdef FACTION
#include <faction.h>
#include <limits.h>
FI

  FT(
    AUTHORS( "timetoplatypus" ),
    SPEC( "increment() returns 1 when given 0" ),
    increment(0) == 1
  );

  FT(
    AUTHORS( "timetoplatypus" ),
    SPEC( "increment() returns 0 when given the largest integer value" ),
    increment(INT_MAX) == 0
  );

FC
#endif

拡張モードの機能

拡張モードでは:

  • 実行時に -l フラグを使うことでユーザーが定義したログファイルに出力をコピーできます。
  • 結果表は使用しているターミナルの横幅にあわせて動的にサイズが変わります。デフォルトの横幅は78文字です。

参照