C++ 単体テスト フレームワークに関する質問に対するこの回答は、C++/CLI と NUnit を使用してネイティブ C++ コードの単体テストを作成するという、これまで思いもよらなかった可能性を示唆しています。
C# テストには NUnit を使用しているため、C++ でも使用できる可能性は魅力的です。
私はマネージ C++ を使用したことがないので、このアプローチに実際的な制限はありますか? あなたの多くはこれをやっていますか?もしそうなら、あなたの経験はどのようなものでしたか?
C++ 単体テスト フレームワークに関する質問に対するこの回答は、C++/CLI と NUnit を使用してネイティブ C++ コードの単体テストを作成するという、これまで思いもよらなかった可能性を示唆しています。
C# テストには NUnit を使用しているため、C++ でも使用できる可能性は魅力的です。
私はマネージ C++ を使用したことがないので、このアプローチに実際的な制限はありますか? あなたの多くはこれをやっていますか?もしそうなら、あなたの経験はどのようなものでしたか?
私たちは常にこれを行っています。C++/CLI で記述された多くのアセンブリがあり、C# と NUnit を使用してそれらをテストしています。実際、私たちの目標は C# で適切に動作するアセンブリを提供することなので、これを行うことで確実にそれを達成できます。
C++/CLI で NUnit テストを記述し、アンマネージ C++ を呼び出すこともできます。おそらく最良の方法は、純粋なアンマネージ C++ をライブラリに保持し、NUnit を使用してライブラリにリンクするテスト アセンブリを作成することです。
私の経験では、ネイティブコードのロードと使用に問題が発生するため、NUnitを使用してC ++/CLIを介してC++ネイティブコードをテストすることはできません。
nunitを使用して、c++標準スレッドライブラリの実装である「justthread」に対してリンクされた基本的なc++/cliテストdllをロードしようとしました。テストdllは、最新バージョンのNUnit(2.6.2)でもロードされません。
だから間違いなく行く方法ではありません!
これは非常にうまく機能し、混合環境にいる場合は、パラメーター化されたテストだけでなく、共通のテスト ランナーとフレームワークを使用できるという利点があります。
2 つの欠点がありますが、ほとんどの場合、どちらも深刻ではありません。
あなたが本当にうるさいなら、テストはもはや純粋なネイティブ環境で実行されていないので、何かがテスト中に動作する可能性がありますが、実行時に失敗する可能性があります. これが問題になるには、かなりエキゾチックなことをしなければならないと思います。
C++ コードを C++/CLI プログラムにインクルードできることに依存しています。これにより、ヘッダーとの衝突が発生することがあり、コードが UNICODE で問題なくビルドされるように強制されます。一般に、これはコードの粗悪なビット (Win32 呼び出しの Ansi バリアントの一貫性のない使用など) を明らかにするため、良いことです。インクルードされているのはヘッダーのみであるため、ヘッダーを公開しているレベルが高すぎることがよくわかる可能性があることに注意してください。インクルードの一部は、おそらく cpp 実装ファイル内にあるはずです。
C++ 以外の開発者がテストを理解または維持する必要がある場合、最大の懸念は C++/CLI 言語 (以前の Managed C++) 自体の学習曲線です。
C++CLI/NUnit テスト プロジェクトに貢献し、マネージ ネイティブ コード インターフェイス間で発生するさまざまな問題を解決するには、少なくとも 1 ~ 2 年の C++ OOP の経験が必要です。(貢献とは、スタンドアロンで動作し、モック オブジェクトを作成し、C++/CLI でネイティブ インターフェイスを実装および使用できるなど、すべてのテスト ニーズを満たすことができることを意味します。)
一部の人々は、貢献できるほど十分に C++/CLI を理解していない可能性があります。
非常に要求の厳しいテスト ニーズを持つ特定のタイプのネイティブ ソフトウェア ライブラリの場合、C++/CLI/NUnit は、テスト コードを機敏に保ち、変更に対応できるようにしながら、ユニット テストのすべてのニーズを満たす唯一の組み合わせです。xUnit Test Patterns: Refactoring Test Codeという本をこの方向に進めることをお勧めします。
使ったことがないのですが、ポートはありませんか?おそらくhttp://cunit.sourceforge.net/documentation.htmlがあなたのために働くでしょう。