今回の変更点は以下のとおりです。
- 追加
- 値のパラメータを operator + で連結できるように修正
- 値のパラメータを連結する ::iutest::Concat を追加
- テストフィクスチャの定義が省ける値のパラメータ化テストを追加(IUTEST_AP,IUTEST_INSTANTIATE_TEST_CASE_AP(Visual Studio では IUTEST_P,IUTEST_INSTANTIATE_TEST_CASE_P でも省略可能))
- IUTEST_TYPED_TEST,IUTEST_TYPED_TEST_P の別名マクロを追加(IUTEST_T, IUTEST_TP)
- xml 出力に timestamp を追加
- 前提条件の検証用マクロ IUTEST_ASSUME_* を追加
- Windows 向けメニュー登録ユーティリティを追加
- SSTP 通知リスナーを追加
- 修正
- 値のパラメータ化テストが日本語テスト名に対応していなかった問題を修正
- ビルドエラー修正
- バグ修正
バグ修正
いろいろと更新しているうちに、エンバグや把握していなかった不具合が見つかったので、修正しました。テストも増強したので、安定化したのではないかと思います。
SSTP 通知リスナーを追加
以前、ブログで書いた機能になります。「[iutest] テスト結果を「伺か」にしゃべらせてみた」
こちらはお遊び的な機能になってます。
以降から、大きな機能追加を紹介します。
前提条件の検証用マクロ IUTEST_ASSUME_* を追加
ASSERT,EXPECT,INFORM とは違うフレーバーになります。ASSUME では、検証に失敗した場合にテストをスキップします。
テストを特定の条件下でのみ実行したい場合に使用します。
例えば、整数型のサイズを条件としたときは、以下のように書きます。
struct hoge { int a; char b; }; IUTEST(Test, Size) { IUTEST_ASSUME_EQ(4, sizeof(int)); IUTEST_ASSERT_EQ(8, sizeof(hoge)); }
この機能は gtest モードでも利用可能です。
値のパラメータの連結に対応
値のパラメータを複数連結してパラメータを作成する機能を追加しました。これにより、より複雑なパラメーターを簡単に作成できるようになりました。
// true,false + 1,10 IUTEST_INSTANTIATE_TEST_CASE_P(A1, ConcatTest , ::iutest::Concat(::iutest::Bool(), ::iutest::Values(1, 10))); // operator + も利用可能 // 1-9 + true,false + 1, 10 IUTEST_INSTANTIATE_TEST_CASE_P(P5, ConcatTest , ::iutest::Range(1, 10) + ::iutest::Bool() + ::iutest::Values(1, 10));
テストフィクスチャの定義が省ける値のパラメータ化テストを追加
値のパラメータ化テストを書くには、テストフィクスチャの定義が必須でした。しかしながら、ほとんどの場合、パラメータの型を決定するために定義するだけで、その作業は手間になっていました。
class BoolParamTest : public ::iutest::TestWithParam<bool> {}; IUTEST_P(BoolParamTest, Test) { bool param = GetParam(); } IUTEST_INSTANTIATE_TEST_CASE_P(My1, BoolParamTest, ::iutest::Bool());
そこで、テストフィクスチャの定義が不要な値のパラメータ化テストを追加しました。
IUTEST_AP(BoolParamTest, Test) { bool param = GetParam<bool>(); } IUTEST_INSTANTIATE_TEST_CASE_AP(My1, BoolParamTest, ::iutest::Bool());
パラメータの型は内部的には any となっており、GetParam Template 関数は unsafe_any_cast した結果を返す点に注意してください。
(非 Template の GetParam を使うと ::iutest::any が取得できます。)
また、Visual Studio の場合、通常の IUTEST_P でもテストフィクスチャの定義が不要になります。
もちろん、定義をした場合でも今まで通り使用できます。
(※ この実装には __if_exists を使用しています。__if_exists については、後日ブログにしたいと思います。 )
Windows 向けメニュー登録ユーティリティを追加
Windows 向けに main からのテスト実行ではなく、メニューバーから任意のテストを実行するユーティリティを追加しました。こちらは、GUI に関わるテストや統合されたアプリケーションでテストを行いたい場合に使うことを想定しています。
(io テストのような低レベルなものや、コンソールで完結できるものは通常どおり main から実行しましょう)
ようはランチャーのようなものです。
#include <util/iutest_util_menu.hpp> // TestMenu ユーティリティのインスタンスを作る // コンストラクタにはメニューIDの先頭の番号を指定します static ::iuutil::TestMenu s_test_menu(4000); /* ~中略~ */ hWnd = CreateWindow( // ... /* ~中略~ */ // ウィンドウ作成後、ウィンドウのメニューハンドルを渡して Create s_test_menu.Create( GetMenu(hWnd) ); } /* ~中略~ */ switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: // メッセージハンドラに処理を追加 s_test_menu.OnCommand(wmId); return DefWindowProc(hWnd, message, wParam, lParam);
こちらは実行すると以下のようにメニューが自動生成されます。
テストの出力は標準出力に吐かれるので、コンソールウィンドウを作っておくと良いかもしれません。
今後の予定
しばらくは、 C言語版の iutest_c に集中しようかな~と思います。iutest でバグがあった場合は対応します。
バグがあったら是非報告してくださいm(__)m
0 件のコメント:
コメントを投稿