CppUnitを使ってみる
以前はC++で開発することが良くあったのだが、昔と違って今はC++版UnitTestもあって良い時代になったもんだね。というわけで使ってみる。
まずインストール。
debian 4.0では下記でインストールできた。
apt-get install libcppunit-dev libcppunit-doc
Test First!
最初にテストコードを書いてあとから実装コードを書きましょう。
hoge-test.hpp
#ifndef hoge_test_h #define hoge_test_h #include <cppunit/TestCase.h> class hoge_test : public CppUnit::TestCase { public: explicit hoge_test() : CppUnit::TestCase("hoge_test") {} void test_hoge(); static CppUnit::Test * suite(); }; #endif
hoge-test.cpp
void hoge_test::test_hoge() { CPPUNIT_ASSERT_EQUAL(/*期待値*/,/*結果*/); // などなど検証コードを書く } Test * hoge_test::suite() { TestSuite * suite = new TestSuite("hoge-test"); suite->addTest(new TestCaller<objectmemory_test> ("test_hoge", &hoge_test::test_hoge)); return suite; }
suite()メソッドは最近のメタ機能付きの処理系と違って自分でメソッドを指定しないといけない。ちょっと不便だけどまぁ仕方無い。templateなどをつかってどうにかならんもんか。
と思ってちょっと調べてみたらAutoRegisterSuiteというのもあるらしい。
今度試してみるか。
参考: CppUnit - The Unit Testing Library
alltest.cpp
#include <cppunit/ui/text/TestRunner.h> #include "hoge-test.hpp" int main(int argc, char* argv[]) { CppUnit::TextUi::TestRunner runner; runner.addTest(hoge_test::suite()); return runner.run(); }
主なクラス
- TestCase
- こいつを継承してテストコードを書く
- TestSuite
- テストの集合
- Test
- テストの抽象
- TestCaller
- テストを呼ぶ
- TestRunner
- テストを実行し結果表示する
大体の継承関係は下記の通り
Test ◆--- TestSuite ◆--- TestCase ◆--- TestCaller