C ++
进行测试。然而我无法弄清如何设置和使用该测试框架。
请提供任何链接或教程,谢谢!
C ++
进行测试。然而我无法弄清如何设置和使用该测试框架。
请提供任何链接或教程,谢谢!
这个页面 可能会有所帮助,它评论了相当多的C++单元测试框架:
看看CPPUnitLite 或 CPPUnitLite2 。
CPPUnitLite 是由 Michael Feathers 创建的,他最初将 Java 的 JUnit 移植到 C++ 中作为 CPPUnit(CPPUnit 试图模仿 JUnit 的开发模型 - 但是 C++ 缺少 Java 的特性 [例如反射],使其难以使用)。
CPPUnitLite 试图创建一个真正的 C++ 风格的测试框架,而不是一个从 Java 移植到 C++ 的框架。 (我在 Feather 的书 Working Effectively with Legacy Code 中间接引述)。 CPPUnitLite2 似乎是另一个重写版本,具有更多的功能和缺陷修复。
我还偶然发现UnitTest++,其中包括 CPPUnitLite2 和其他框架的一些内容。
微软发布了 WinUnit。
以下是我用于测试微软IIS URL Rewrite模块的方法(基于命令行,但也适用于VS):
这里是一个例子:
// 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();
}
};
// 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,因为它不需要我编写除测试以外的任何内容(我将.dll作为测试构建,而不是.exe)。 我只需构建一个项目,然后将WinUnit.exe指向我的测试输出目录,并运行它找到的所有内容。您可以在此下载WinUnit项目。(MSDN现在要求您下载整个问题,而不是文章。WinUnit已包含在其中。)
VS9附带的框架是.NET,但您可以使用C++ / CLI编写测试,只要您习惯于学习一些.NET技巧,就应该能够测试大多数C++代码。
boost.test和googletest看起来非常相似,但是适用于略有不同的用途。这两者都有二进制组件,因此您需要在解决方案中添加一个额外的项目来编译和运行测试。
我们使用的框架是CxxTest,它非常轻巧;它仅包含头文件,并使用Perl(!)脚本从您的头文件中提取测试套件信息(套件继承自CxxTest :: Base,所有测试方法的名称以“test”开头)。显然,这需要您从一个来源或另一个获取Perl,这会增加构建环境设置的开销。
我使用UnitTest++。
自从我发表这篇文章以来,源代码已经从SourceForge移动到了github。此外,示例教程现在更加不可知 - 它不再涉及任何配置或项目设置。
我怀疑它是否仍适用于Visual Studio 6,因为现在的项目文件是通过CMake创建的。如果你仍然需要旧版本支持,可以在SourceForge分支下获取最后一个可用版本。
我曾经苦恼于在 Windows 环境下的 Visual Studio 中实现非托管 C++ 应用程序的单元测试。最终我克服了这个问题,并编写了一篇逐步指南,以帮助进行非托管 C++ 应用程序的单元测试。我希望它能对你有所帮助。
我不确定VS2008,但我知道微软在VS2005中发布的单元测试框架只适用于.NET,而不是C++。
我也使用过CppUnit,还可以。与NUnit/JUnit/等类似。
如果您使用过boost,它们也有一个单元测试库
boost背后的人有一些严肃的编码技巧,所以我认为他们的框架应该很好,但可能不是最用户友好的:-)