今回の変更点はこちらになります。
- IUTEST_SKIP() << "message" に対応
- スキップ時のログ出力を修正
- コンパイルの通らないテストコードを許可するテスト生成マクロ(*_IGNORE)を追加
スキップ機能周りの機能改善
これまでは、IUTEST_SKIP() したときに・スキップしたのかどうか ・なぜスキップしたのかこれらがログから解りにくい状態でした。
今回の修正により、以下のようにスキップしたときにメッセージの表示、追加ができるようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 |
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); } |

構文エラーも無視可能なテストの定義マクロを追加
まず、こちらのコードを御覧ください。1 2 3 4 5 6 7 8 9 |
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 もあります。)
1 2 3 4 5 6 7 |
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)で、
1 |
@ignore |
なんだってー(゚Д゚;)!!って思いました。
それ以外にも、java でのテストのコーディングが非常に軽快で羨ましかった。。。
だから、作りました。
gcc や clang でも同様のテクニックがあれば教えてください m(__)m
次はC言語バージョンの iutest_c v1.1.0 をリリースしたいところなのですが、
とある環境でテストが通っていないため、どうなるかわかりません。
プログラムは難しい~…それではまた~
0 件のコメント:
コメントを投稿