大掃除

引越してまだ半年であまり汚れてなかったこともあり、さほど時間をかけずに済みました*1
そこで、3.2 のバグを直すついでに C++ 用のテストフレームワークを調べてみました。

どれも似たり寄ったりの機能を持っているのですが、中でも 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などなど、挙げればいろいろあります。でも、そういった不便と引き換えに、ストレートに「テスト」を書くことに集中ができるのがいいと思うんですよね。言い訳かなぁ。


いいテストフレームワークがあれば、また検討してみたいと思います。

*1:普段から重曹を使って水まわりをピカピカにするのが好きなのもあるかも;-)

*2:コメントを書けば、まあなんとか...