2014年8月26日火曜日

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

iutest v1.10.0 をリリースしました。
変更点は以下の通りです。

  • 追加
    • --verbose コマンドラインオプションを追加
    • --iutest_default_package_name コマンドラインオプションを追加
    • operatoer == のないオブジェクトの IUTEST_*_EQ 対応
    • operatoer != のないオブジェクトの IUTEST_*_NE 対応
    • junit xml 出力に対応(--iutest_output=junit)
    • IUTEST_FLAG(ostream_formatter) を追加
    • tuple 要素を取得する GetParam tempalate 関数を追加
    • ARM対応
  • 修正
    • --iutest_break_on_failure でスキップや警告でも停止していた不具合を修正
    • Visual Studio 14 CTP 3 対応
    • バグ修正

今回は追加が多めです。

コマンドラインオプション
コマンドラインオプションが2つ追加されました。
1つ目は --verbose オプションで、これを付けるとログ出力が増えます。
具体的には、テスト終了時に SKIP,DISABLED のテストリストが出力されるようになります。

2つ目は --iutest_default_package_name オプションで、これでルートパッケージ名を指定できるようになりました。
具体的には、Jenkins で集計した際に (root) と表示されていたところが変更されます。
指定なし:

--iutest_default_package_name=All:

また、これまで --iutest_output には xml しか指定できませんでしたが、junit が指定できるようになりました。

構造体の比較
struct TestObjectX
{
    int a,b,c;
};
上記のような構造体が等しいかテストする場合、これまでは以下のように書くことができませんでしたが、v1.10.0 から記述可能になりました。
IUTEST(AssertionTest, MemCmpEQ)
{
    TestObjectX x={0,1,2};
    TestObjectX y={0,1,2};
    IUTEST_ASSERT_EQ(x, y);
}

IUTEST(AssertionTest, MemCmpNE)
{
    TestObjectX x={0,1,2};
    TestObjectX y={0,1,3};
    IUTEST_ASSERT_NE(x, y);
}

比較は memcmp で行います。それ以外の方法での比較が必要な場合は、適宜 operator を定義してください。

ostream formatter
これまでアサーションが出力する数値は10進数でした。ただ、16進数で表示したこともあるだろう、ということで IUTEST_FLAG(ostream_formatter) を追加しました。
使い方は、標準ライブラリのストリームと同じように ioマニピュレーター を使った方法や、関数呼び出しでも変更できます。
::iutest::IUTEST_FLAG(ostream_formatter) << ::std::hex;
::iutest::IUTEST_FLAG(ostream_formatter) << ::std::setw(8) << ::std::setfill('0');
::iutest::IUTEST_FLAG(ostream_formatter) << ::std::setprecision(5);
この設定は全体に適用されます。もとの設定に戻すには明示的に再設定が必要ですのでご注意ください。

template 版 GetParam
パラメーターに複数の要素を持たせたい場合、パラメーターの型を tuple にすることで実現できます。
しかし、パラメーター取得関数の GetParam はパラメーターの型で返すため、各要素を取り出すには
std::get<1>(GetParam());
のようにする必要がありました。

v1.10.0 ではこの std::get と同じ働きをする template 版の GetParam 関数を用意しました。
以下のように使用します。
class TupleGetTest : public ::iutest::TestWithParam< ::iutest::tuples::tuple<bool, int> >
{
};

IUTEST_P(TupleGetTest, Test)
{
    IUTEST_ASSERT_TRUE(GetParam<0>());
    IUTEST_ASSERT_EQ(10, GetParam<1>());
}

IUTEST_INSTANTIATE_TEST_CASE_P(A, TupleGetTest
    , ::iutest::Values( ::iutest::tuples::tuple<bool, int>(true, 10) ) );
少しだけ、記述が簡単になりましたね。

修正
修正および追加点として Visual Studio 14 CTP 3 への対応とプロジェクトを追加しました。
対応といっても大した修正はありません。
正式版は 2015年リリースらしいので楽しみです。

最後に
iutest のご意見ご要望があればこちらにお願いします。
直接 twitter とかで言っていただいても OK です。

0 件のコメント:

コメントを投稿