如何设置Visual Studio C ++的unit testing

我很难弄清楚如何在Visual Studio 2008 for C ++中设置和使用testing框架,大概是使用内置的unit testing套件。

任何链接或教程将不胜感激。

这个页面可能有所帮助,它回顾了不lessC ++unit testing框架:

  • CppUnit的
  • 如Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • 单位++
  • CxxTest

检出CPPUnitLiteCPPUnitLite2

CPPUnitLite由Michael Feathers创build,最初将Java的JUnit作为CPPUnit移植到C ++中(CPPUnit尝试模仿JUnit的开发模型 – 但C ++缺乏Java的特性(例如reflection)使其易于使用)。

CPPUnitLite尝试构build一个真正的C ++风格的testing框架,而不是一个移植到C ++的Java框架。 (我正在从羽毛的工作有效地解释与传统代码书)。 CPPUnitLite2似乎是另一个重写,更多function和错误修复。

我也偶然发现了包含CPPUnitLite2和其他框架的东西的UnitTest ++

微软发布了WinUnit

还签出CatchDoctest

有一种方法可以使用Visual Studio 2008内置的testing框架来testing非托pipeC ++ 。 如果使用C ++ / CLI创buildC ++testing项目,则可以调用非托pipeDLL。 如果要testing以非托pipeC ++编写的代码,则必须将Common Language Runtime支持从/ clr:safe切换到/ clr。

我在这里的博客上有一步一步的细节: http : //msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

这里是我用来testing微软的IIS URL重写模块的方法(它是基于命令行的,但也适用于VS):

  1. 通过将源代码移动到cpp文件并根据需要使用前向声明来确保您的头文件是可消耗的。
  2. 编译你的代码来testing库(.lib)
  3. 创build您的UnitTest项目作为C + +的CLR支持。
  4. 包括你的头文件。
  5. 包含您的.lib文件。
  6. 添加对Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll的引用
  7. 使用一个非常小的类来声明你的unit testing,并像这样从托pipe跳转到C ++ / Native代码(可能有错别字):

这里是一个例子:

// 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的东西,所有真正的testing都将用C ++ native来完成,TestShim类将被用来将testing“发布”到MSTest.exe(或者使其可见)。

为了添加新的testing,你只需声明一个新的[TestMethod] void NewTest(){:: NewTest();}方法和一个新的NewTest()本地函数。 没有macros,没有技巧,直截了当。

现在,heade文件是可选的,但它可以用于使用C ++本地签名(例如wchar_t *而不是Stirng ^)公开Assert类的方法,所以它可以保持接近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

就个人而言,我更喜欢WinUnit,因为它不需要我写任何东西,除了我的testing (我build立一个.dll作为testing,而不是一个exe)。 我只是build立一个项目,并将WinUnit.exe指向我的testing输出目录,它运行它find的所有东西。 你可以在这里下载WinUnit项目 。 (MSDN现在要求您下载整个问题,而不是文章,WinUnit包含在内)

VS9附带的框架 .NET,但是你可以用C ++ / CLI编写testing,所以只要你习惯了学习.NET的一些东西,你应该可以testing大多数的C ++代码。

boost.test和googletest看起来相当相似,但适合稍有不同的用途。 这两个都有一个二进制组件,所以你需要在你的解决scheme中额外的项目来编译和运行testing。

我们使用的框架是CxxTest ,它要轻得多; 它只是头文件,并使用Perl(!)脚本从头文件中检测testing套件信息(套件从CxxTest :: Baseinheritance,所有testing方法的名称都以“test”开头)。 显然,这要求你从一个源或另一个 源获得Perl,这会增加编译环境设置的开销。

我使用UnitTest ++ 。

自从我发布这个post以来,源代码已经从SourceForge移到了github。 此外, 示例教程现在更加不可知 – 不会涉及任何configuration或项目。

我怀疑它仍然适用于Visual Studio 6,因为现在通过CMake创build了项目文件。 如果你仍然需要旧版本的支持,你可以得到SourceForge分支下的最后一个可用版本。

这里提到的工具都是命令行工具。 如果您寻找更加集成的解决scheme,请查看cfix studio ,它是用于C / C ++unit testing的Visual Studio AddIn。 它与TestDriven.Net非常相似,但对于(非托pipe)C / C ++而不是.NET。

我用VS2005和Eclipse使用CppUnit 。 维基是非常彻底的(特别是如果你熟悉JUnit)。

我对VS2008并不十分确定,但是我知道微软在VS2005中作为Team Suite的一部分提供的unit testing框架只是针对.NET,而不是C ++

我也使用了CppUnit,这是正常的。 和NUnit / JUnit /很相似。

如果你使用boost,他们也有一个unit testing库

后面的人有一些严重的编码印章,所以我会说他们的框架应该是相当不错的,但它可能不是最友好的用户:-)

我也喜欢CxxTest也是出于同样的原因。 这是一个头文件,所以不需要链接。 你也不会因为有Python跑步者而被Perl困住。 我将很快审查谷歌图书馆。 提升的东西拉太多的其他行李。

据我所知,Visual Studio 2008的unit testing器仅适用于.NET代码。

我在Visual Studio 2005上使用CppUnit,发现它非常好。

据我所知,设置是相对无痛的。 只要确保在testing项目中链接器(链接器→input→附加依赖项)包含cppunitd.lib。

然后,在头部#include <cppunit/extensions/HelperMacros.h>

然后您可以按照http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html中的步骤来使您的testing类工作。;

我忍受着用Visual Studio在Windows环境中对非托pipeC ++应用程序执行unit testing。 所以我设法克服了这个问题,并写了一篇文章,作为非托pipeC ++应用程序unit testing的逐步指导。 我希望它可以帮助你。

在Visual Studio中对非托pipeC ++进行unit testing