94

おそらく組み込みの単体テストスイートを使用して、 VisualStudio2008でテストフレームワークをセットアップして使用できるようにする方法を理解するのに問題があります。C++

リンクやチュートリアルをいただければ幸いです。

4

12 に答える 12

57

このページは役立つかもしれません、それはかなりの数のC++ユニットテストフレームワークをレビューします:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • ユニット++
  • CxxTest

CPPUnitLiteまたはCPPUnitLite2を確認してください。

CPPUnitLiteは、元々JavaのJUnitをCPPUnitとしてC ++に移植したMichaelFeathersによって作成されました(CPPUnitはJUnitの開発モデルを模倣しようとしますが、C ++にはJavaの機能(リフレクションなど)がなく、使いやすくなっています)。

CPPUnitLiteは、C ++に移植されたJavaフレームワークではなく、真のC++スタイルのテストフレームワークを作成しようとします。(私はFeatherのLegacy Codeブックで効果的に作業することから言い換えています)。CPPUnitLite2は、より多くの機能とバグ修正を備えた、別の書き直しのようです。

また、CPPUnitLite2やその他のフレームワークからのものを含むUnitTest++に出くわしました。

MicrosoftはWinUnitをリリースしました。

また、 CatchまたはDoctestをチェックアウトします

于 2008-08-30T13:51:31.510 に答える
9

Microsoft で IIS URL 書き換えモジュールをテストするために使用するアプローチを次に示します (コマンドライン ベースですが、VS でも機能するはずです)。

  1. ソース コードを cpp ファイルに移動し、必要に応じて前方宣言を使用して、ヘッダー ファイルが消費可能であることを確認します。
  2. コードをコンパイルしてライブラリ (.lib) としてテストします
  3. CLR をサポートする C++ として UnitTest プロジェクトを作成します。
  4. ヘッダー ファイルをインクルードします。
  5. .lib ファイルを含めます。
  6. Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll への参照を追加します。
  7. 単体テストを宣言するために非常に小さなクラスを使用し、次のようにマネージド コードから 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 ファイルはオプションですが、Assert クラスのメソッドを C++ ネイティブ シグネチャ (例: 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

于 2009-12-01T21:56:06.783 に答える
6

個人的には、WinUnitの方が好きです。なぜなら、テスト以外は何も書く必要がないからです(exe ではなく、テストとして .dll をビルドします)。プロジェクトをビルドし、WinUnit.exe をテスト出力ディレクトリにポイントするだけで、見つかったすべてが実行されます。ここから WinUnit プロジェクトをダウンロードできます。(MSDN では、記事ではなく、問題全体をダウンロードする必要があります。WinUnit は含まれています。)

于 2008-09-15T16:33:51.530 に答える
4

VS9に含まれているフレームワーク.NETですが、C ++ / CLIでテストを記述できます。ただし、いくつかの.NET ismsを習得している限り、ほとんどすべてのC++コードをテストできるはずです。

boost.testgoogletest はかなり似ているように見えますが、わずかに異なる用途に適合しています。これらは両方ともバイナリコンポーネントを持っているため、テストをコンパイルして実行するには、ソリューションに追加のプロジェクトが必要になります。

私たちが使用するフレームワークはCxxTestで、これははるかに軽量です。これはヘッダーのみであり、Perl(!)スクリプトを使用してヘッダーからテストスイート情報を取得します(スイートはCxxTest :: Baseから継承され、すべてのテストメソッドの名前は「test」で始まります)。明らかに、これには、あるソースまたは別のソースからPerlを取得する必要があり、ビルド環境のセットアップにオーバーヘッドが追加されます。

于 2008-08-14T14:17:39.610 に答える
2

ここで説明したツールはすべてコマンド ライン ツールです。より統合されたソリューションを探している場合は、C/C++ 単体テスト用の Visual Studio アドインであるcfix studioをご覧ください。これは TestDriven.Net に非常に似ていますが、.NET ではなく (アンマネージ) C/C++ 用です。

于 2009-06-24T06:21:25.387 に答える
2

私はUnitTest++を使用しています。

この記事を書いてから数年で、ソースは SourceForge から github に移動しました。また、サンプル チュートリアルはより不可知なものになりました。構成やプロジェクトのセットアップにはまったく触れません。

プロジェクト ファイルが CMake 経由で作成されるようになったため、Visual Studio 6 でも機能するとは思えません。それでも古いバージョンのサポートが必要な場合は、 SourceForgeブランチで利用可能な最後のバージョンを入手できます。

于 2008-08-06T08:28:14.620 に答える
1

同じ理由でCxxTestも好きです。これはヘッダーファイルのみであるため、リンクは必要ありません。Pythonランナーもあるので、Perlにとらわれることはありません。私はすぐにグーグルライブラリをレビューします。Boostのものは、他の荷物を引き込みすぎます。

于 2008-08-27T18:15:50.350 に答える
1

私はVS2005とEclipseでCppUnitを使用しました。wikiは非常に徹底的です(特にJUnitに精通している場合)。

于 2008-08-11T23:13:28.770 に答える
1

VS2008について100%確信はありませんが、MicrosoftがTeam Suiteの一部としてVS2005で出荷した単体テストフレームワークは、C++ではなく.NET専用であったことは知っています。

私もCppUnitを使用しましたが、大丈夫でした。NUnit /JUnit/などとほとんど同じです。

Boostを使用したことがある場合は、ユニットテストライブラリもあります

Boostの背後にいる人たちは、いくつかの深刻なコーディングのチョップを持っているので、彼らのフレームワークはかなり良いはずだと思いますが、それは最もユーザーフレンドリーではないかもしれません:-)

于 2008-08-11T23:45:25.633 に答える
1

Visual Studio を使用した Windows 環境でアンマネージ C++ アプリケーションの単体テストを実装するのに苦労していました。そこで私はなんとか克服し、アンマネージ C++ アプリケーションのユニット テストの段階的なガイダンスとして投稿を書きました。お役に立てば幸いです。

Visual Studio でのアンマネージ C++ の単体テスト

于 2012-12-07T08:32:16.853 に答える
1

私の知る限り、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の手順に従って、テスト クラスを機能させることができます。

于 2008-08-19T17:01:49.547 に答える