ページ

2013年12月25日水曜日

[C++03][iutest] 日本語テスト名機能の紹介

2013/12/16 に京都で行われた 「江添とボレロ村上の京都C++勉強会」 に参加しました。
やはり、人に解説してもらうと頭に入りやすくていいですね^^
参加者のレベルも高くてすごいなと感じました。

さて、
質疑応答の中で日本語識別子の話が出て、テスト名に使えるねって声がありました。

それ C++03 でもできるよ!
(※ それ = テスト名に日本語を使う)

iutest は私が個人的に作っている Google Test ライクなテスティングフレームワークです。
特徴としては、ヘッダーオンリー・Google Test の拡張機能・C++11 対応などがあります。

その中の機能の一つとして日本語テスト名に対応しています。
(v1.5.0 から対応。執筆時点での最新バージョンは v1.7.0
v1.5.0 をリリースしたときの変更履歴に書いただけで、詳しく書いてなかったので今回紹介することにしました。

はじめに
この機能を紹介するまえに。

C++11 からは識別子に日本語が使えるようになりました。
このため、C++11 以降の環境では今回紹介する機能を使わずとも日本語テスト名が書けます。
なので、日本語テスト名が使いたければ素直に C++11 対応のコンパイラーを使いましょう。


サンプルコード
それでは、サンプルコードを見てみましょう。
#include "iutest.hpp"

IUTEST(JapaneseTest, IUTEST_JAPANESE_NAME(かきくけこ))
{
    IUTEST_ASSERT_STREQ("かきくけこ"
        , ::iutest::UnitTest::GetInstance()->current_test_info()->name());
}

class FixedTest : public ::iutest::Test {};

IUTEST_F(IUTEST_JAPANESE_NAME_F(FixedTest, あいうえお)
    , IUTEST_JAPANESE_NAME(かきくけこ))
{
    IUTEST_ASSERT_STREQ("あいうえお"
        , ::iutest::UnitTest::GetInstance()->current_test_info()->test_case_name());
    IUTEST_ASSERT_STREQ("かきくけこ"
        , ::iutest::UnitTest::GetInstance()->current_test_info()->name());
}

int main(int argc, char* argv[])
{
    IUTEST_INIT(&argc, argv);
    return IUTEST_RUN_ALL_TESTS();
}

日本語テスト名を使う場合は、通常テスト名を書くところで IUTEST_JAPANESE_NAME を使うだけです。
簡単ですよね?
テストフィクスチャーを使う場合は、IUTEST_JAPANESE_NAME_F を使って、第一引数にフィクスチャークラス名を指定します。

実行画面


いかがでしょうか?
ちょっとでも iutest を使ってみたくなりましたでしょうか?
iutest はヘッダーオンリーなのでソースコードをダウンロードするだけで、すぐに使えます!

是非是非、使ってみてください。
SourceForge: http://osdn.jp/projects/iutest/
github: https://github.com/srz-zumix/iutest

0 件のコメント:

コメントを投稿