2009-09-17 12 views
7

でユニットテストをコンパイルするには、組み込みプラットフォーム上で実行するようにクロスコンパイルC++ユニットテストにCppUnitのようなパッケージを誰が使用していますか?クロスのCppUnitまたは類似

私はLynxOSのボード上で実行する必要があります実行ファイルをコンパイルするLinuxボックスのG ++を使用しています。私は、一般的なユニットテストパッケージのいずれかを構成し、ユニットテストを作成するものを構築することはできません。

私はユニットテストパッケージなどCppUnitは、unittestの++、GTEST、CppUTest、多くのを見ますが、クロスコンパイラのシナリオでこれらのパッケージを使用する方法について非常に少ないです。 "configure"スクリプトを持つものは、これが可能であることを暗示していますが、それらを設定してビルドすることはできません。

+0

私はWindowsとLinuxでクロスコンパイルプロジェクトでCppUnitを使用しています。全く問題はありません。あなたの正確な問題は何ですか? – tauran

答えて

2

CxxTestをご覧ください。私はクロスコンパイルには使用していませんが、ヘッダーとPythonスクリプトに完全に基づいています。コンパイルされたライブラリはありません。他のものより適応する方が簡単かもしれません。 x86のコンパイラの通常いくつかの味 - クロスコンパイルされたユニットテストコードは、ユニットをコンパイルすることです

2

私の練習は、ネイティブツールチェーンを使用して自分自身をテストします。これらの単体テストは、組み込みターゲットではなくビルドマシンで実行されます。スタブやモックで厳密な単体テスト(統合テストとは対照的に)を書く場合は、組み込みハードウェアに依存するべきではありません。そうでなければ...始めるのが遅すぎることはありません。

このアプローチの1つの追加の利点は、非x86の組み込みターゲットのために、ユニットテストのこのタイプは、エンディアンの問題、初期化されていない変数や他の興味深いバグを洗い流すことができますということです。

0

ここでは答えは出ませんが、私はあなたのユニットテストを異なるターゲットで実行しないというアドバイスはしません。システムテストとユニットテストの両方が必要です。

そうでなければ、ARM /他の組み込みCPU上のアライメントエラーのような単純なものは捕らえられません。

0

あなたはユニットテストあなたのOSやアーキテクチャのためにコンパイルされたライブラリだけでなく、あなたのDEV /ビルドマシン(複数可)に何を持っている必要がありますように聞こえます。私はこのためBoost ++単体テストフレームワークを好む。あなたのアーキテクチャにあらかじめビルドされたものをダウンロードすることもできますが、通常は自分でコンパイルする必要があります。クロスコンパイルの方法(グーグルでhttp://goodliffe.blogspot.com/2008/05/cross-compiling-boost.htmlなど)を検索していくつかの解決策を見つけました。 CppUnitはクロスコンパイルが簡単で、試したことがないかもしれません。一般的な原則は同じで、あなたの開発アーキテクチャとターゲットマシンのライブラリバージョンを同じにコンパイルしてください。

新しいターゲットの設定では、ターゲットOS/archに必要なBoost ++ライブラリをコンパイルし、 Boost ++ライブラリとテストされるコードの両方に対して。

利点は、x86 Linux Boost ++ライブラリまたはターゲットのBoost ++ライブラリとリンクすることができるため、ターゲットとdev/buildマシンの両方でテストを実行できることです。

私の一般的なセットアップは、次のようになります。

​​

私はすべての私のプロジェクトのためのlibs /ディレクトリに必要な異なるアーキテクチャの下でコンパイルブースト++ LIBSを入れて、私のMakefileの中でそれらのLIBSを参照。ソースとテストは、私のdevマシンとtest_foo。{arm、mips、ppc、etc}のターゲット上でtest_foo.x86を実行できるように、指定されたarch変数でビルドされます。

3
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux 

sh4-linuxは、プログラムを実行するプラットフォームです。

0

Cpputest(v3.3)をクロスコンパイルするには、LD、CXX、およびCC make変数を上書きする必要がありました。 libCppUTest.aを構築するには

make all LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

libCppUTestExtを構築するにはCppUTestとCppUTestExtの両方がライブラリとそのテスト(CppUMockのために)私はCPPUTEST_HOMEディレクトリから次のコマンドを使用し構築され得るために

(CppUMock用).A:

make extensions LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

あなたは、あなたのCPPUTEST_HOMEで生産されCppUTest_testsとCppUTestExt_tests実行可能ファイルをコピーすることができますターゲットデバイスに接続して実行してください。

CppTestがターゲット上で独自のテストをパスすると仮定すると、CppTestでテストを開発する準備が整います。テストコードをクロスコンパイルされたCpputestライブラリにリンクし、結果の実行ファイルをターゲットにコピーするだけです。次に、ターゲットプラットフォーム自体から単体テスト結果を取得するために実行します。