2011-03-18 13 views
3

C++コードの単体テストを行うために、いくつかのスクリプト言語を利用したいと思います。必要なC++関数にアクセスできることを前提として、スクリプト言語でテストを開発する方が簡単です。スクリプト言語を使用したC++ユニットテスト

私はRubyまたはPerlを念頭に置いています(私はそれらに詳しいので)。私はSWIGを使ってC++コードとのインターフェースをとることができたようです。

SWIGの代替手段はありますか?この目的のために個人的に使用するスクリプト言語は何ですか?

最後に、このアプローチをテストに使用するのが適切です(効率的です)。

答えて

3

Inline:CPPは、PerlからC++コードを呼び出す比較的簡単な手段を提供します。

私は、次の(またはテストスクリプトの内部同等ディレクティブで)使用してスクリプトを実行することをお勧め:

perl -MInline=FORCE,NOISY,NOCLEAN test.pl 
1

Cコードを記述してC++コンパイラでコンパイルする場合は、テスト用に別の言語を使用することもできます。

しかし、C++スタイルで書かれたコードではありません。

正しい、漏れのないコピー構築、割り当て、オーバーロードされた演算子について、どのようにテストしますか?テンプレートはどうですか?スクリプト言語は、C++と同じようにこれらを呼び出すことはありません。多くの場合、値渡しという概念もありません。

最終的にコードを使用する環境からテストします。

+0

おかげであなたのための洞察力。はい、私は、スクリプト言語を使用して詳細なユニットテストを実行することはできません。機能/コンポーネントテストはどうですか? – ravil

+0

@ravil:インタフェースによって異なります。インターフェイスがCのようなシグネチャでグローバル関数を呼び出すことからなる場合は、(適切なバインディングを生成した後で)任意の言語から行うことができます。インタフェースにコンシューマによるクラスインスタンスの作成と削除が含まれている場合でも、インタフェースをラップすることは可能ですが、自動ラッパージェネレータが不足するため、多くの作業が必要になります。 –

+1

実際、私はChaiScriptがC++コードをテストを実行しているかのようにC++コードをテストできると信じています。ChaiScriptの各関数呼び出しは、C++関数呼び出しに直接マップされます。主な違いは、ChaiScriptはスタックベースの言語ではないということです。すべてのオブジェクトはヒープ上に作成され、スタックはC++で期待されるものと一致するようにエミュレートされます。 – lefticus

2

C++コードをPerlコードのテスト方法と同様の方法でテストする場合は、TAPを出力するライブラリを使用できます。

page listing the TAP producersを見るonly one designed specifically for C++があるようです。

GitHub page for libtap++もご覧ください。 Test::Harnessによって提供さproveで解析することができ

 
1..3 
ok 1 - This test passes 
ok 2 - foo() should be 1 
ok 3 - bar() should be "a string" 

:ような何かを作り出す


あなたが既に使用している言語以外の言語を学ぶ必要はありません。

+1

返信いただきありがとうございます!興味深いアプローチですが、私はlibtap ++を使うだけでは十分ではないと私は思っています。スクリプト言語ですべてのテストを記述したい主な理由は、コーディングの容易さ、柔軟性、優れた文字列解析(出力を検証する)、開発のスピードです。 しかし、あなたが提供したリンクから[libPerl ++](https://github.com/Leont/libperl--)をチェックしました。これはPerl APIとのインターフェイスにきちんとしたライブラリのようです。 – ravil

+1

@ravilでは、Perlを使ってC++テストプログラムを生成できます。 –

関連する問題