Visual Studio C++ の単体テストを設定する方法
-
08-06-2019 - |
質問
おそらく組み込みの単体テスト スイートを使用して、Visual Studio 2008 for C++ でテスト フレームワークをセットアップして使用できるようにする方法を理解するのに苦労しています。
リンクやチュートリアルをいただければ幸いです。
解決
このページ 役立つかもしれません。かなりの数の C++ 単体テスト フレームワークがレビューされています。
- Cppユニット
- ブーストテスト
- Cppユニットライト
- ナノCppユニット
- ユニット++
- Cxxテスト
チェックアウト CPUnitLite または CPPUnitLite2.
CPUnitLite Michael Feathers によって作成されました。彼はもともと Java の JUnit を CPPUnit として C++ に移植しました (CPPUnit は JUnit の開発モデルを模倣しようとしますが、C++ には Java の機能がありません [例:反射]を使用して使いやすくします)。
CPPUnitLite は、C++ に移植された Java フレームワークではなく、真の C++ スタイルのテスト フレームワークを作成しようとします。(フェザーの文章を意訳しています) レガシーコードを効果的に使用する 本)。 CPPUnitLite2 追加の機能とバグ修正を加えて再度書き直されたようです。
私もたまたま見つけました ユニットテスト++ これには、CPPUnitLite2 やその他のフレームワークのものが含まれています。
マイクロソフトがリリースした ウィンユニット.
他のヒント
Visual Studio 2008 内の組み込みテスト フレームワークを使用してアンマネージ C++ をテストする方法があります。. 。C++/CLI を使用して C++ テスト プロジェクトを作成すると、アンマネージ DLL を呼び出すことができます。アンマネージ C++ で作成されたコードをテストする場合は、共通言語ランタイムのサポートを /clr:safe から /clr に切り替える必要があります。
私のブログに段階的な詳細が記載されています。 http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Microsoft で IIS URL Rewrite モジュールをテストするために私が使用したアプローチは次のとおりです (コマンドライン ベースですが、VS でも機能するはずです)。
- ソース コードを cpp ファイルに移動し、必要に応じて前方宣言を使用することで、ヘッダー ファイルが利用可能であることを確認します。
- コードをコンパイルしてライブラリ (.lib) としてテストします
- CLR サポートを備えた C++ として UnitTest プロジェクトを作成します。
- ヘッダー ファイルをインクルードします。
- .lib ファイルを含めます。
- Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll への参照を追加します。
- 単体テストの宣言に非常に小さなクラスを使用し、次のようにマネージド コードから C++/ネイティブ コードにジャンプします (タイプミスがある可能性があります)。
以下に例を示します。
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
このアプローチを使用すると、C++/CLI に関することをあまり学ぶ必要がなく、実際のテストはすべて C++ ネイティブで実行され、TestShim クラスを使用してテストを MSTest.exe に「公開」します (またはテストを表示できるようにします)。 )。
新しいテストを追加するには、新しい [TestMethod] void NewTest(){::NewTest();} メソッドと新しい void NewTest() ネイティブ関数を宣言するだけです。マクロもトリックもなし、単純明快です。
現在、heade ファイルはオプションですが、C++ ネイティブ シグネチャを使用して Assert クラスのメソッドを公開するために使用できます (例:Stirng^) の代わりに wchar_t* を使用することで、C++ に近づけて C++/CLI から遠ざけることができます。
以下に例を示します。
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
個人的には、 ウィンユニット 私にそうする必要はないので テスト以外のことは何でも書いてください (exe ではなく、テストとして .dll をビルドします)。プロジェクトをビルドし、WinUnit.exe をテスト出力ディレクトリに指定するだけで、見つかったすべてのものが実行されます。あなたはできる ここから WinUnit プロジェクトをダウンロードします. 。(MSDN では現在、記事ではなく問題全体をダウンロードする必要があります。WinUnitは内蔵されています。)
VS9に含まれるフレームワーク は .NET を使用していますが、C++/CLI でテストを作成できるため、.NET の主義を学習することに抵抗がなければ、ほとんどの C++ コードをテストできるはずです。
ブーストテストそして グーグルテスト見た目はかなり似ていますが、わずかに異なる用途に適応されています。これらの両方にはバイナリ コンポーネントがあるため、テストをコンパイルして実行するには、ソリューションに追加のプロジェクトが必要になります。
私たちが使用するフレームワークは、 Cxxテスト, 、はるかに軽いです。これはヘッダーのみであり、Perl (!) スクリプトを使用してヘッダーからテスト スイート情報を収集します (スイートは CxxTest::Base から継承し、すべてのテスト メソッドの名前は「test」で始まります)。明らかに、これには Perl を次から入手する必要があります。 一つの情報源 または 別の, これにより、ビルド環境のセットアップにオーバーヘッドが追加されます。
ここで説明したツールはすべてコマンドライン ツールです。より統合されたソリューションをお探しの場合は、以下をご覧ください。 シーフィックススタジオ, これは、C/C++ 単体テスト用の Visual Studio アドインです。これは TestDriven.Net に非常に似ていますが、.NET ではなく (アンマネージ) C/C++ を対象としています。
使ったことがある Cppユニット VS2005 と Eclipse を使用します。この Wiki は非常に詳しく説明されています (特に JUnit に精通している場合)。
VS2008 については 100% 確信はありませんが、マイクロソフトがチーム スイートの一部として VS2005 に同梱した単体テスト フレームワークは .NET 専用であり、C++ 用ではなかったことは知っています。
CppUnit も使用しましたが、問題ありませんでした。NUnit/JUnitなどとほぼ同じです。
ブーストを使用したことがある場合は、 単体テストライブラリもあります
ブーストの背後にいる人たちはいくつかのことを持っています 深刻な コーディングが難しいので、フレームワークはかなり優れているはずだと思いますが、最もユーザーフレンドリーではないかもしれません :-)
私も同じ理由で CxxTest が好きです。ヘッダー ファイルのみなのでリンクは必要ありません。Python ランナーもあるので、Perl にこだわる必要はありません。近いうちにGoogleライブラリをレビューする予定です。Boost のものは他の荷物を引き込みすぎます。
私の知る限り、Visual Studio 2008 の単体テスターは .NET コードのみを対象としています。
Visual Studio 2005 で CppUnit を使用しましたが、非常に優れていることがわかりました。
私が覚えている限り、セットアップは比較的簡単でした。テスト プロジェクトのリンカー (リンカー → 入力 → 追加の依存関係) に cppunitd.lib が含まれていることを確認してください。
それから、 #include <cppunit/extensions/HelperMacros.h>
ヘッダーに。
その後、次の手順に従うことができます http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html テストクラスを動作させるために。
Visual Studio を使用して Windows 環境でアンマネージ C++ アプリケーションの単体テストを実装するのに苦労していました。そこで私はなんとか克服し、アンマネージド C++ アプリケーションの単体テストの段階的なガイダンスとして投稿を書きました。お役に立てれば幸いです。