「テスト駆動開発による組み込みプログラミング」の演習でIGNORE_TESTの罠

More than 5 years have passed since last update.

先日から次の本の写経をやっているんだけど、P.70で行き詰まったので書いておく。


テスト駆動開発による組み込みプログラミング――C言語とオブジェクト指向で学ぶアジャイルな設計

http://www.oreilly.co.jp/books/9784873116143/



IGNORE_TEST

P.70ではIGNORE_TESTマクロを使う解説がある。ところが、実行結果が異なり、本来1 Ignoredとなるべき所が、0 Ignoredとなってしまう。さらに悪いことに、その後に書いたテストが失敗するように書いても全て成功してしまう問題が起こる。しょうがないのでデバッグするとどうやらUnityのフレームワーク側に問題がありそうだ。次のように修正すれば解説通りの動作となる事が分かった。


unity_fixture.c

void UnityIgnoreTest(const char * printableName)

{
Unity.NumberOfTests++;
Unity.CurrentTestIgnored = 1;
if (UnityFixture.Verbose)
{
UnityPrint(printableName);
UNITY_OUTPUT_CHAR('\n');
}
else
UNITY_OUTPUT_CHAR('!');

// これが要るんちゃう?!?!
// ↓ ★これを追加
UnityConcludeFixtureTest();

}


フレームワークの中身にも触れられて良かったとしよう。

# Unity自体がちゃんとテストされているか心配になった。


本家に出てたよ

よくよく調べると、原典のサイトに情報が出てた。

http://forums.pragprog.com/forums/123/topics/10126