我无法弄清楚如何在Visual Studio 2008 for C ++中设置和使用测试框架,可能是内置的单元测试套件。

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

===============>>#1 票数:56 已采纳

这个页面可能有所帮助,它回顾了不少C ++单元测试框架:

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

查看CPPUnitLiteCPPUnitLite2

CPPUnitLite由Michael Feathers创建,他最初将Java的JUnit移植到C ++作为CPPUnit(CPPUnit尝试模仿JUnit的开发模型 - 但C ++缺乏Java的功能[例如反射]以使其易于使用)。

CPPUnitLite试图建立一个真正的C ++风格的测试框架,而不是一个移植到C ++的Java框架。 (我从“羽毛的有效工作与遗产代码”一书中解释)。 CPPUnitLite2似乎是另一个重写,具有更多功能和错误修复。

我也偶然发现了UnitTest ++ ,其中包括来自CPPUnitLite2和其他一些框架的东西。

微软发布了WinUnit

还要结帐CatchDoctest

===============>>#2 票数:24

有一种方法可以使用Visual Studio 2008中内置的测试框架来测试非托管C ++ 如果使用C ++ / CLI创建C ++测试项目,则可以调用非托管DLL。 如果要测试用非托管C ++编写的代码,则必须从/ clr:safe切换公共语言运行时支持到/ clr。

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

===============>>#3 票数:9

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

  1. 通过将源代码移动到cpp文件并使用前向声明(如果需要),确保您的头文件可以使用。
  2. 编译代码以测试为库(.lib)
  3. 使用CLR支持将您的UnitTest项目创建为C ++。
  4. 包括您的头文件。
  5. 包括.lib文件。
  6. 添加对Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll的引用
  7. 使用一个非常小的类来声明你的单元测试并从托管跳转到像这样的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的东西,所有真正的测试都将在C ++ native中完成,TestShim类将用于将测试“发布”到MSTest.exe(或使其可见)。

要添加新测试,您只需声明一个新的[TestMethod] void NewTest(){:: NewTest();}方法和一个新的void NewTest()本机函数。 没有宏,没有技巧,直截了当。

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

===============>>#4 票数:6

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

===============>>#5 票数:4

VS9附带的框架 .NET,但您可以用C ++ / CLI编写测试,因此只要您习惯学习一些.NET主题,就应该能够测试大多数C ++代码。

boost.testgoogletest看起来非常相似,但适用于稍微不同的用途。 这两个都有二进制组件,因此您需要在解决方案中使用额外的项目来编译和运行测试。

我们使用的框架是CxxTest ,它更轻; 它只是标题,并使用Perl(!)脚本从标题中删除测试套件信息(套件继承自CxxTest :: Base,所有测试方法的名称都以“test”开头)。 显然,这需要您从一个另一个 获取Perl,这会增加构建环境设置的开销。

===============>>#6 票数:2

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

===============>>#7 票数:2

我使用UnitTest ++

自从我发布这篇文章以来,源代码已从SourceForge转移到github。 此外, 示例教程现在更加不可知 - 根本不会进入任何配置或项目设置。

我怀疑它仍然适用于Visual Studio 6,因为项目文件现在通过CMake创建。 如果您仍需要旧版本支持,则可以在SourceForge分支下获取最新版本。

===============>>#8 票数:1

我很痛苦在使用Visual Studio的Windows环境中为非托管C ++应用程序实现单元测试。 因此,我设法克服并撰写了一篇文章,作为非托管C ++应用程序单元测试的分步指导。 我希望它可以帮助你。

在Visual Studio中对非托管C ++进行单元测试

===============>>#9 票数: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中的步骤操作,以使您的测试类正常工作。

===============>>#10 票数:1

出于同样的原因,我也喜欢CxxTest。 它只是一个头文件,因此不需要链接。 你不会被Perl困住,因为有一个Python运行器。 我将很快审核谷歌图书馆。 Boost的东西带来了太多的其他包袱。

===============>>#11 票数:1

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

===============>>#12 票数:1

我对VS2008并不是100%肯定,但我知道微软在VS2005中作为Team Suite的一部分提供的单元测试框架仅适用于.NET,而不是C ++

我也使用过CppUnit而且没关系。 与NUnit / JUnit /基本相同。

如果您使用过boost,它们还有一个单元测试库

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

  ask by DShook translate from so

未解决问题?本站智能推荐: