モジュールの 1 つに CppUnit テスト ケースがあるビジュアル スタジオ プロジェクトがあります。このプロジェクトをビルドすると、dll (ModuleUnitTest.dll のようなもの) が作成されます。これらのテストを実行するにはどうすればよいですか? この dll から読み取ってテストを実行できる CppUnit で利用可能な既製のスタブはありますか? それとも自分で書く必要がありますか?これらの単体テスト ケースは長い間利用可能であり、スタブ コードがないため、記述する必要はないと考えています。誰かが dll からテストを実行する方法を教えてもらえますか?
2 に答える
Visual Studio のTest Explorerフローティング パネルを使用します。
テスト コードのどこかにテスト ランナーが必要です。標準的な答えは、CppUnitTestMain.cpp のようなファイルを作成し、次のようなコードを追加することです (cppunit のドキュメントから直接)。
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
int main( int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;
CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest( registry.makeTest() );
bool wasSuccessful = runner.run( "", false );
return wasSuccessful;
}
これが個別にコンパイルされたプロジェクトの場合、TestRegistry 情報は使用できないため、LoadLibrary を使用してコーディングを行って DLL を取り込み、そこから情報を取得してテスト ランナーに追加することになると思います。不可能ではありませんが、自分で解決しなければならない作業です。
しかし、テスト レジストリを手動で処理することは、マクロが簡単に処理できるはずの余分な作業です。それは、私が尋ねたいより大きな質問につながります.なぜあなたのテストは現在DLLプロジェクトに収容されているのですか? 彼らが処刑されていない場合、あなたは彼らをどうしていますか?活用できる他の実行可能ファイルをロードして実行していますか?
私たちが通常使用する答えは、テスト プロジェクト自体を DLL ではなく実行可能ファイルにし、すべてのテスト コードを含めることです。これは、リンカの追加の依存関係設定 ($(SolutionDir)businessProject\debug\obj*.OBJ ファイル) を介してビジネス ロジックを静的にリンクします。ソリューションでは、構築中のメインの businessProject コードにプロジェクトの依存関係を追加します。