2009-03-02 11 views
0

私たちはLinuxのもとでC++で開発しており、自動化されたテストを設定しようとしています。我々はCppUnit oder CxxTestのようなテストフレームワークを使うつもりです。 Antを使用してソフトウェアをビルドしており、テストを実行するためにAntを使用しています。DbUnit for C++?

いくつかのテストではデータベースアクセスが必要になるため、Javaの世界ではDbUnit(JUnit拡張)のように、データベース内のテストデータの準備とクリーンアップを容易にするツールまたはフレームワークを探しています。

また、実際のDbUnitを使用することもできます - Java VMが利用可能です。 DbUnitのAntタスクを利用することが最も有望なようです。関連するフィールド報告は歓迎です!

答えて

0

C++開発のためのDbUnitのようなツールがないように、私たちは独自のフレームワークを構築しました。基本的には、C/C++テストランナーから実際のDbUnit操作を呼び出すためのアダプターです。 DbUnitによって提供されるAnt tasksを使用します。

TS_DB_INSERT(filename)のようなマクロを定義し、system("ant -Ddb.dataset=filename db.insert")などと定義しました。

この場合、db.insertはデータベースに対してINSERT操作を実行するDbUnitタスクを実行するAntターゲットです。 filenameは、挿入するデータを含むXMLデータセットを参照します。 DbUnit compareをラップするアサーションマクロもあります。

テストケースは次のようになります。

void testDatabaseStuff 
{ 
    TS_DB_INSERT("input.xml"); 

    TestedClass::doSomething(); 

    TS_DB_ASSERT("expected.xml"); 
} 
0

私はDBで作業するための独自のC++ APIを持っているとします。 それが本当であれば、あなた自身ですべてのDB準備をすることをお勧めします。その場合は、DB APIもテストします。

2

boost unit testingをお勧めします。セットアップとティアダウンを使用してデータベースを手動でクリーンアップする必要があります。もちろん、ODBCで独自のC++ DbUnitを構築することもできます。もし私もこれを使うことができたので私に教えてください!

+0

は、手動でユニットテストのセットアップ/ティアダウンメソッド内のデータベースにアクセスすることもCxxTestフレームワークを使用して可能です。 ブーストをおすすめするもう一つの理由はありますか? –

+0

非常に多くのC++プロジェクト*は既に1つの形式でBoostを使用しています。 (program_options、shared_ptr、filesystem、...)テストのためにBoostを使用すると、外部ツールに依存することが少なくなります。私は個人的に常に勝利を考えます。 – DevSolar