我无法弄清楚如何在 Visual Studio 2008 for C++ 中设置和使用测试框架(大概与内置的单元测试套件一起使用)。

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

有帮助吗?

解决方案

这一页 可能有帮助,它回顾了相当多的 C++ 单元测试框架:

  • Cpp单元
  • 升压测试
  • CppUnitLite
  • 纳米Cpp单元
  • 单位++
  • 测试测试

查看 CPPUnitLite 或者 CPPUnitLite2.

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

CPPUnitLite 试图创建一个真正的 C++ 风格的测试框架,而不是移植到 C++ 的 Java 框架。(我转述自《羽毛》 有效地处理遗留代码 书)。 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 重写模块时使用的方法(它是基于命令行的,但也应该适用于 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() 本机函数。没有宏,没有技巧,简单明了。

现在,头文件是可选的,但它可用于公开具有 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)

华泰

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

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

增强测试谷歌测试看起来相当相似,但用途略有不同。这两个都有一个二进制组件,因此您的解决方案中需要一个额外的项目来编译和运行测试。

我们使用的框架是 测试测试, ,轻得多;它只是标头,并使用 Perl (!) 脚本从标头中抓取测试套件信息(套件继承自 CxxTest::Base,所有测试方法的名称都以“test”开头)。显然,这需要你从 一个来源 或者 其他, ,这会增加构建环境设置的开销。

我用 单元测试++.

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

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

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

我用过 Cpp单元 使用 VS2005 和 Eclipse。该 wiki 非常详尽(特别是如果您熟悉 JUnit)。

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

我也用过CppUnit,还不错。与 NUnit/JUnit 等非常相似。

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

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

出于同样的原因,我也喜欢 CxxTest。它只是一个头文件,因此不需要链接。您不会被 Perl 困住,因为还有一个 Python 运行器。我很快就会回顾谷歌图书馆。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++ 应用程序单元测试的分步指南。我希望它可以帮助你。

Visual Studio 中非托管 C++ 的单元测试

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top