2012年9月30日日曜日

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

ダウンロードはこちらから。
SourceForge もしくは github からソースコードの取得もできます。

v1.0 からの変更点
  • 追加機能
    • 例外の値を検査するアサーション
    • Pairwise
    • IUTEST_SKIP
    • Logger
    • ファイルパス操作補助クラス
  • 修正
    • 初期化関数が呼ばれていない場合に警告表示
    • CRT セキュリティ強化関数の失敗時ハンドラに対応
    • RTTI がない場合の型表示
    • IUTEST_*_NO_FATAL_FAILURE に空の statement を与えた場合の警告抑制
    • その他バグを修正

追加機能だけここで説明したいと思います。

例外の値を検査するアサーション
Google Test では、
*_THROW期待する例外が throw されることをテスト
*_ANY_THROWなんらかの例外が throw されることをテスト
*_NO_THROW例外が throw されないことをテスト
の3つのテスト方法があります。
今回、これに加えて throw された値の比較テストをできるようにしました。

static void ExceptionFunction(int i)
{
    switch( i )
    {
    case 1:
        throw 2;
        break;
    case 2:
        throw "error";
    case 3:
        throw ::std::string("error");
    default:
        break;
    }
}

IUTEST(AssertionTest, Exception)
{
    IUTEST_EXPECT_THROW_VALUE_EQ(ExceptionFunction(1), int, 2);
    IUTEST_EXPECT_THROW_VALUE_NE(ExceptionFunction(1), int, 0);

    IUTEST_ASSERT_THROW_VALUE_STREQ(ExceptionFunction(2), const char *, "error");
    IUTEST_ASSERT_THROW_VALUE_STREQ(ExceptionFunction(3), ::std::string, "error");
    IUTEST_ASSERT_THROW_VALUE_STRCASEEQ(ExceptionFunction(2), const char *, "Error");
}

対応しているのは、EQ/NE/STREQ/STRCASEEQ です。
本来ならばユーザーが例外をキャッチして値を検査するところを、簡単に記述できるようになりました。
こちらは gtest 実装を利用するモードでも使用できます。

Pairwise
複数のパラメータの組み合わせを生成する Combine に加えて、
オールペア法による組み合わせを生成する Pairwise を追加しました。
Pairwise を使用することで Combine よりも格段に少ないテスト回数で済むようになります。
オールペア法についての詳しい説明はここでは省きます。
(※ Pairwise は gtest 利用モードでは使用できません。)

IUTEST_SKIP
これまでは実行されるべきテストが実行されなかった場合に、
テスト結果を「成功」ではなく「スキップ」として出力するようにしていました。
(gtest はスキップ非対応。そのへんはGoogle Test を使ってみる - その6(Jenkins との連携、スキップ対応)で説明してます。)

今回、新たにユーザーがスキップできるように IUTEST_SKIP を追加しました。
実行環境に依存しているテストの実行/不実行の選択に使用することを想定しています。
すでにテストが失敗している場合はスキップになりません。
IUTEST(Foo, Bar)
{
    IUTEST_SKIP(); // この時点でテストをスキップして終了
    IUTEST_ASSERT_EQ(2, 3); // ここは実行されない
}

IUTEST(Foo, Baz)
{
    IUTEST_EXPECT_EQ(2, 3);
    IUTEST_SKIP(); // すでにテストが失敗しているのでスキップにはせず、終了
    IUTEST_EXPECT_EQ(2, 3); // ここは実行されない
}
(※ IUTEST_SKIP は gtest 利用モードではスキップせずに return するだけです。)

Logger
ログ出力のカスタマイズポイントとして用意しました。
Visual Studio Unit Test Framework 対応のために追加しましたが、他のケースでも利用できると思います。

ファイルパス操作補助クラス
カレントディレクトリの取得などをするクラスを追加しました。
gtest には同様なクラス(::testing::internal::FilePath)があります。

0 件のコメント:

コメントを投稿