大掃除
引越してまだ半年であまり汚れてなかったこともあり、さほど時間をかけずに済みました*1。
そこで、3.2 のバグを直すついでに C++ 用のテストフレームワークを調べてみました。
- CppUnit http://sourceforge.net/projects/cppunit
- Boost Test Library http://www.boost.org/libs/test/doc/index.html
- CPlusTest.framework http://developer.apple.com/documentation/DeveloperTools/Conceptual/UnitTesting/index.html
- CxxTest http://cxxtest.sourceforge.net/
どれも似たり寄ったりの機能を持っているのですが、中でも Boost と CxxTest はシンプルな使い方ができるので、趣味に合いそうな雰囲気でした。でも、テストのためにここまで手間をかける必要があるのだろうか、というところで引っ掛かってしまい、結局、以下のような assert を並べただけのテストドライバを書くことに。
#include <cassert> #include <iostream> #include "Dictionary.h" int main() { SKKEntry e1 = SKKEntry::ParseOkuriNasi("key", "/abc/def/ghi/"); assert(e1.Key() == "key"); assert(e1.Candidate() == "/abc/def/ghi/"); assert(e1.Candidate(':') == ":abc:def:ghi:"); assert(e1.Join() == "/abc/def/ghi/"); assert(e1.Join(':') == ":abc:def:ghi:"); assert(e1.Description() == "key /abc/def/ghi/"); assert(e1.First() == SKKCandidate("abc")); assert(e1.Next() == SKKCandidate("def")); assert(e1.Next() == SKKCandidate("ghi")); assert(e1.Count() == 3); assert(e1.FirstHint().IsEmpty()); assert(e1.NextHint().IsEmpty()); assert(e1.HintCount() == 0); e1 = SKKEntry::ParseOkuriAri("key", "/abc/def/ghi/[a/abc/def/]/[b/def/ghi/]/"); ...
この手のテストドライバで不便なのは、エラー以降のテストが行なわれないことですね。それとログが出ない、進捗状況がわからない、evidence も取得できない、テストケースに名前がない*2などなど、挙げればいろいろあります。でも、そういった不便と引き換えに、ストレートに「テスト」を書くことに集中ができるのがいいと思うんですよね。言い訳かなぁ。
いいテストフレームワークがあれば、また検討してみたいと思います。