11

我有兴趣了解在 Visual Studio 2005(专业版)中使用 TDD 和 C++ 单元测试的经验

首先是一些背景。我们有一个相当大的项目,其中大部分是在 Linux 上使用 CppUnit 进行单元测试开发的。该项目分为几个库,每个库都有自己的一组测试。我有一个简单的脚本来编译库,编译测试套件,然后运行测试。因此,在对代码进行更改后,我只需从命令行运行“test”并运行测试。

现在,大多数开发人员都在 Windows 上使用 Visual Studio 2005 来开发这个产品。当然,他们仍然可以使用 nmake 从命令行运行测试,但涉及额外的步骤,我希望有一个更集成的解决方案。

所以我的问题有两个部分。

首先,在大型代码库上布置测试代码的最佳方式是什么?在一个解决方案中创建多个测试项目,每个库一个是正常的吗?

其次,是否有任何工具可以将 CppUnit 测试集成到 Visual Studio 中?正确设置依赖项后,测试项目应该运行测试,但目前结果仍显示在命令窗口中。

4

7 回答 7

3

我公司的一个项目就是这样做的。我们使用一个名为 CXXTest ( http://cxxtest.sourceforge.net/guide.html ) 的单元测试框架。我们非常喜欢这个 C++ 框架,因为它只需要您编写一个包含单元测试的头文件。.CPP 文件由脚本创建(提供 Python 和 Perl 脚本)。

我们通过提供构建单元测试(如果需要构建)然后执行它们的后期构建步骤与 Visual Studio 集成。输出(显示通过和失败的内容)显示在输出窗口中——您永远不需要离开 IDE。

于 2008-09-22T02:05:24.607 回答
2

这是我所做的:

  • 在您的主解决方案中创建一个测试可执行项目,该项目仅使用来自单元、单元测试和测试框架的源代码。
  • 使测试运行程序在成功运行测试时生成一个文本文件,以便 Visual Studio 可以跟踪依赖关系。
  • 添加一个项目以启动您的测试运行程序并生成测试文件。这意味着您现在每个测试有两个项目。
  • 使测试运行器成为包含该单元的库的依赖项。

就个人而言,我认为测试框架(Google Test、Boost test、CppUnit 等)并不重要。大多数在功能上几乎相同。

我对生成的项目数量并不完全满意,但我认为这是一个 Visual Studio GUI 问题,因为这样包含这些项目实际上非常有用,用于调试等目的。

我尝试使用构建后步骤来运行测试,但不幸的是,这意味着在第一次失败过去后构建没有中断。

于 2009-02-15T00:10:15.000 回答
2

我使用 Boost Test 框架。我倾向于将我的代码拆分为 .lib 文件,并且每个文件都有一个单独的控制台模式 EXE 测试项目。构建测试项目时,它利用“构建后阶段”启动自身,从而运行测试。您可以使每个测试项目成为主应用程序的依赖项,以便每次构建时,首先运行所有测试,但这可能很耗时。相反,我倾向于根据需要手动运行测试项目,但我的自动化夜间构建系统将理所当然地运行所有测试项目(我编写脚本,如果任何测试失败,构建失败,我会收到电子邮件通知)。

更多细节在这里。

于 2008-09-21T18:19:07.677 回答
2
  • 我发现以下文件夹层次结构很有用。创建代码和测试作为 ProjectFolder 的子文件夹。创建 2 个解决方案 code\Project.sln 和 tests\Tests.sln。现在对于每个创建的类库或可执行文件,例如Customers.dll,都有一个相应的测试dll。所以code\Customers\Customers.csproj会有tests\Customers\TestCustomers.csproj,它引用了前者。
  • 将 CPPUnit 集成到 Visual Studio 中需要在项目属性中选择正确的应用程序。“调试”设置。我认为此页面具有在 IDE 中执行单键测试执行 + 报告所需的功能。
于 2008-09-22T03:14:39.243 回答
1

My team is currently using an system where we have an automated nightly build (that can also be run from the project build dashboard by anyone) that includes a VS2k5 "test" solution. The test solution holds all the unit test projects; one unit test project for every "unit" of code in the main project.

When the automated build runs, it builds the main solution, then the test solution, and finally runs all the executables produced by the test solution (a Perl script glues this together). The results of the compile as well as the test execution (EXIT _ SUCCESS, EXIT _ FAILURE) are used to update the project build dashboard.

That EXIT _ FAILURE trick can also be applied to a custom build step of the main project: if the unit test custom build step returns EXIT _ FAILURE, then the build itself fails.

于 2008-09-21T14:53:48.307 回答
1

您还可以使用托管 C++ 在 Visual Studio 中使用内置的单元测试框架编写单元测试。

于 2008-09-22T02:29:47.620 回答
0

看看CUnitWin32。还包括一个例子。

于 2009-02-12T22:12:07.980 回答