单元测试和 C++

更新:2007 年 11 月

可以使用以 Visual C# 和 Visual Basic 编写的单元测试。

说明:

在用 Visual C# 和 Visual Basic 生成泛型类型和泛型方法的单元测试方面,存在一些限制。有关更多信息,请参见单元测试和泛型

根据本主题中介绍的详细信息,还可以使用以 Visual C++ 编写的单元测试。

在单元测试上使用 Visual C++ 的方式取决于 Visual C++ 在解决方案中扮演的角色。以下是一些可能出现的情况:

  • 使用单元测试来测试用 Visual C++ 编写的代码。有关信息,请参见 Visual C++ 成品代码。

  • 测试项目中包含用 Visual C++ 编写的单元测试。有关信息,请参见测试项目和 Visual C++。

  • 您打算从使用 Visual C++ 编写的代码自动生成单元测试。有关信息,请参见代码生成和 Visual C++。

Visual C++ 成品代码

请注意以下关于您要测试的代码(此处称为“产品”代码)的事项。

  • 非托管代码。如果您的成品代码是非托管代码,则需要能够从静态库、.obj 文件或 DLL 入口点调用它。嵌入在可执行文件或 DLL 内部的类方法将不会工作,原因是非托管 Visual C++ 不具有运行时发现机制(即反射)。因此,只有传统的本机绑定机制才会工作。

  • 混合代码。混合项目指的是使用 /clr 编译器选项的项目。如果您的成品代码是混合的,而且不是可执行文件,则可以调用和测试代码中的任何可调用方法。

  • 安全代码或纯代码。如果您的成品代码是安全代码或纯代码,则可以调用和测试可执行文件或 DLL 中的任何可调用的程序集方法。

测试项目和 Visual C++

测试项目具有不同的功能,具体取决于为项目设置的编译器选项。有关更多信息,请参见 编译器选项/clr(公共语言运行库编译)。下面的部分介绍各种编译器选项设置对应的功能。

非托管代码

不能使用非托管或本机 Visual C++ 作为测试项目的编程语言。

混合代码

混合项目指的是使用 /clr 编译器选项的项目。这种测试项目提供了测试以下成品代码的能力:

  • 静态本机库

  • 本机 DLL 入口点

  • 独立的 .obj 文件

  • 具有可调用方法的混合模式 DLL 程序集。这不包括可执行文件,因为它们包含非托管代码,而且非托管可执行代码通常不支持重新设定内存基址。

  • 任何可调用的托管方法。这是用 /clr:pure 或 /clr:safe 编译器选项编译的代码。

安全代码或纯代码

如果您正在使用 /clr:pure 或 /clr:safe 编译器选项编译测试项目,则可以测试任何可调用的托管方法。这意味着成品代码是使用 /clr、/clr:pure 或 /clr:safe 编译器选项编译的。

代码生成和 Visual C++

可以将单元测试生成到 Visual C++ 测试项目中。可以从 Visual C++ 成品代码项目生成这些测试。请注意下列事项:

  • 成品代码项目。如果成品代码是使用 Visual C++ 编写的,则仅当您的产品使用 /clr:safe 编译器选项时才能生成单元测试。

  • 测试项目。代码生成可以在任何 Visual C++ 测试项目类型中产生单元测试:混合项目、安全项目和纯项目。产生的默认项目类型是 /clr:safe 项目。如果要将项目更改为 /clr 或 /clr:pure,则可以使用 Visual C++ 编译器选项随时执行此修改。有关更多信息,请参见 /clr(公共语言运行库编译)

请参见

任务

如何:创作单元测试

概念

单元测试和泛型

参考

编译器选项