「C言語向けユニットテスティングフレームワーク Cmockeryについて - 千里霧中」に続いて、C言語のテスティングフレームワークを紹介していきたいと思います。今回はCSpecについて。
CSpecについて
テストコード
テストメソッドは以下の通り。
#include <cspec.h> DESCRIBE(hoge, "hoge") IT("returns 0 when the argument is 0.") SHOULD_EQUAL(hoge(0), 0) END_IT IT("returns -1 when the argument is not 0.") SHOULD_EQUAL(hoge(4), -1) END_IT END_DESCRIBE
xUnitの用語でいえば、「SHOULD_EQUAL」がAssertionメソッド(assertThatに近い)に該当します。
また「IT("returns 0 when the argument is 0.")」がテストメソッドの識別子になります。「IT」はテスト対象のことであり、「IT returns 0 when the argument is 0.」と、自然言語でテスト対象のSpecを説明するようにテストを書いていきます。
さらにC言語特有の「;」や「{」「}」を隠している等、DSLを意識した実装となっています。
このように自然言語に似たDSLで仕様や振る舞いを記述していくのが、xSpecをはじめとするBDDフレームワークの一般的な特徴です。
一方main関数は以下の通りです。自動テストディスカバリ機能はなく、手動でmain関数にDESCRIBE構文をリストアップして実行させます。
#include <cspec.h> #include <cspec_output_verbose.h> int main(int argc, char **argv) { CSpec_Run(DESCRIPTION(hoge), CSpec_NewOutputVerbose()); return 0; }
結果は以下のようになります。デフォルト設定ではドキュメントを意識したような出力となります。
Describe:hoge - it returns 0 when the argument is 0. OK: (hoge(0)) == (0) - it returns -1 when the argument is not 0. OK: (hoge(4)) == (-1)