今回の変更点はこちらになります。
- 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 件のコメント:
コメントを投稿