2013年2月6日水曜日

iutest v1.3.1 をリリースしました

この間 v1.3.0 をリリースしたばかりですが、 v1.3.1 をリリースしました。

今回の変更点はこちらになります。

  • IUTEST_SKIP() << "message" に対応
  • スキップ時のログ出力を修正
  • コンパイルの通らないテストコードを許可するテスト生成マクロ(*_IGNORE)を追加
スキップ機能周りの機能改善
これまでは、IUTEST_SKIP() したときに
・スキップしたのかどうか
・なぜスキップしたのか
これらがログから解りにくい状態でした。
今回の修正により、以下のようにスキップしたときにメッセージの表示、追加ができるようにしました。
IUTEST(SkipTest, CanSkip)
{
    IUTEST_SKIP() << "test";
    IUTEST_EXPECT_EQ(2, 3);
}

IUTEST(SkipTest, Failed)
{
    IUTEST_EXPECT_EQ(2, 3);
    IUTEST_SKIP();
    IUTEST_EXPECT_EQ(2, 3);
}




構文エラーも無視可能なテストの定義マクロを追加
まず、こちらのコードを御覧ください。
template<typename T>
void f()
{
    int a//; error
}
int main(int, char**)
{
    return 0;
}
あからさまに構文エラーがあるのがわかると思いますが、
こちらのコードは Visual Studio ではコンパイルエラーになりません!
 (C++ Compiler Farm でコンパイルしてみました。)

Visual Studio では使用されていないテンプレート関数はコンパイル対象にならない感じなのですが、 これのせいでいざ使おうと思ったら大量のエラーが・・・なんてことがあったり。

しかし
この挙動を逆手に取れば、なにを書いてもエラーにならない関数が書けるではないですか!
というわけで、IUTEST_TEST_IGNORE マクロを用意しました。
(※ IUTEST_F_IGNORE, IUTEST_P_IGNORE, IUTEST_TYPED_TEST_IGNORE, IUTEST_TYPED_TEST_P_IGNORE もあります。)

IUTEST_TEST_IGNORE(VedningMachineTest, TotalAmount)
{
    // VedningMachine 定義してないけど、こんな感じでテスト書くよ
    VedningMachine vm;
    vm.Insert(100);
    IUTEST_ASSERT_EQ(100, vm.GetTotalAmount());
}

このマクロを使うと、テスト関数にエラーがあってもコンパイルが通ります。
(※Visual Studio のみの機能になります。)

実用性があるのか?
わかりません。

ただ、この前参加した 「2013年はじめのTDD Boot Camp in 大阪」でのデモンストレーション(java)で、
@ignore
と付けただけで、テストが無視されたんですよ!
なんだってー(゚Д゚;)!!って思いました。
それ以外にも、java でのテストのコーディングが非常に軽快で羨ましかった。。。

だから、作りました。
gcc や clang でも同様のテクニックがあれば教えてください m(__)m

次はC言語バージョンの iutest_c v1.1.0 をリリースしたいところなのですが、
とある環境でテストが通っていないため、どうなるかわかりません。
プログラムは難しい~…それではまた~

0 件のコメント:

コメントを投稿