在 Visual Studio (TDD) 中构建和运行 C++ 单元测试

Posted

技术标签:

【中文标题】在 Visual Studio (TDD) 中构建和运行 C++ 单元测试【英文标题】:Building and running C++ unit tests in Visual Studio (TDD) 【发布时间】:2008-11-03 11:51:14 【问题描述】:

我有一个尝试使用 TDD 的大型项目。 我使用Tut 作为我的测试框架,它有缺陷但足以满足我的需要。

我需要利用链接时间测试接缝,每个测试都必须在自己的可执行文件中。然后,此可执行文件的项目会作为后期构建步骤自行启动。

不幸的是,这意味着我的 Visual Studio Sln 充满了测试,这是不可扩展的,并且还隐藏了实际的重要项目。

有人知道运行这些测试的更好方法吗? 是否可以从构建中隐藏项目但仍然让它们构建?

【问题讨论】:

我后来升级了,添加解决方案文件夹解决了这个问题。我可以把我的测试放在一个文件夹中。 【参考方案1】:

“是否可以从构建中隐藏项目,但仍然让它们构建?”

您可以为测试用例制定单独的解决方案。 然后您可以设置主要项目的后期构建步骤。这个后期构建应该通过单独的解决方案构建测试项目并运行它们。构建测试项目应通过命令行完成(例如,请参阅 here 了解详细信息)。

如果您需要将单元测试与主要项目中的一些 lib-s 链接,您可以使用

#pragma comment(lib, "libname")

详情请见this MSDN page。

【讨论】:

我喜欢创建一个单独的 sln 的想法,希望我可以让他们共享 obj 文件。 我没有尝试分享 obj-s...祝你好运 :)【参考方案2】:

您可以尝试在解决方案资源管理器的解决方案中将测试分组到文件夹(它们是否称为过滤器?)。这会将测试与您的其他项目分开。

但是,否则,您能否避免使用链接时测试接缝(是的,我知道,现在建议这样做可能为时已晚)并使用多态性来提供您的运行时变化并减少测试项目?

【讨论】:

【参考方案3】:

不知道您是否还在寻找解决方案。但这里有一个想法:

您可以将所有测试保存在一个库中,并编写一个应用程序,该应用程序会自行生成并执行每个测试。这样一来,您最终会得到一个套件的可执行文件(因此也是一个项目),并且每个测试都将像一个单独的可执行文件。

这实际上是CUnitWin32 中使用的机制。您甚至可以将测试包装在该框架中。

【讨论】:

以上是关于在 Visual Studio (TDD) 中构建和运行 C++ 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中显示构建时间?

在 Visual Studio 2010 中构建时锁定文件

在 Visual Studio Code 中发布构建

在 Visual Studio 中构建错误

无法在 Visual Studio 中构建汇编语言程序

在 Visual Studio 中构建完成后的 Zip 文件