如何在VisualStudio中整合TDD方法?

11

我想了解在使用Visual Studio 2005(专业版)处理C ++方面的TDD和单元测试方面的经验。首先介绍一下背景。我们有一个相当大的项目,其中大部分是在Linux上使用CppUnit进行单元测试开发的。该项目被分成几个库,每个库都有自己的测试集。我有一个简单的脚本,可以编译库、编译测试套件,然后运行测试。因此,在更改代码后,我只需从命令行运行“test”,测试就会运行。

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

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

首先,如何为大型代码库的测试布置代码?是否正常创建几个测试项目在一个解决方案中,每个项目对应一个库?

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

7个回答

3
我的公司有一个项目正是这样做的。我们使用一个叫做CXXTest的单元测试框架(http://cxxtest.sourceforge.net/guide.html)。我们非常喜欢这个框架,因为它只需要你编写一个包含单元测试的头文件。.CPP文件由脚本创建(提供了Python和Perl脚本)。
我们通过提供一个后期构建步骤来与Visual Studio集成,该步骤构建单元测试(如果需要构建),然后执行它们。输出(显示通过和失败的内容)显示在输出窗口中--您永远不需要离开IDE。

2
我使用Boost Test框架。我倾向于将我的代码分成.lib文件,并为每个文件创建一个单独的控制台模式EXE测试项目。当测试项目构建时,它会利用“后期构建阶段”来启动自身,从而运行测试。你可以将每个测试项目作为主要应用程序的依赖项,这样每次构建时,所有测试都会首先运行,但这可能很耗时间。相反,我倾向于根据需要手动运行测试项目,但我的自动化夜间构建系统会按照常规运行所有测试项目(我编写了脚本,如果有任何测试失败,构建就会失败,并且我会收到电子邮件通知)。
更多细节请参见此处。

2
  • 我发现以下的文件夹层次结构很有用。将代码和测试作为ProjectFolder的子文件夹创建。创建2个解决方案code\Project.sln和tests\Tests.sln。现在,对于每个创建的类库或可执行文件,例如Customers.dll都会有一个相应的测试dll。因此,code\Customers\Customers.csproj将具有tests\Customers\TestCustomers.csproj的引用,后者引用前者。
  • 将CPPUnit集成到Visual Studio中就像在项目属性中选择正确的应用程序一样。我认为这个页面上提供了您需要的内容,可以在IDE内实现单键测试执行和报告。

2

这是我的做法:

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

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

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

我尝试使用后构建步骤来运行测试,但不幸的是这意味着在第一个失败之后,编译过程不会中断。


1

我的团队目前正在使用一个系统,其中我们拥有一个自动化的夜间构建(也可以由任何人从项目构建仪表板运行),其中包括一个VS2k5“测试”解决方案。测试解决方案包含所有单元测试项目;每个“单元”代码都有一个单元测试项目。

当自动化构建运行时,它会先构建主解决方案,然后是测试解决方案,最后运行测试解决方案生成的所有可执行文件(一个Perl脚本将其粘合在一起)。编译结果以及测试执行结果(EXIT _ SUCCESS,EXIT _ FAILURE)用于更新项目构建仪表板。

如果主项目的单元测试自定义构建步骤返回EXIT _ FAILURE,则可以将该EXIT _ FAILURE技巧应用于主项目的自定义构建步骤:则构建本身失败。


我们也使用CruiseControl,因此在每次提交到源代码控制系统后都会运行所有测试。然而,我正在寻找一些开发人员在开发过程中作为编辑-测试周期的一部分使用的工具。 - David Dibben

1

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


很遗憾,我们只有VS2005专业版,而不是团队版,所以我认为它没有测试框架。此外,我们已经使用CppUnit编写了超过10,000个测试。 - David Dibben

0

看一下CUnitWin32。里面还包含了一个示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接