如何将TDD方法与Visual Studio集成?

时间:2008-09-21 14:27:53

标签: c++ visual-studio unit-testing tdd

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

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

现在,大多数开发人员都在Windows上使用Visual Studio 2005来开发此产品。当然,他们仍然可以使用nmake从命令行运行测试,但需要额外的步骤,我宁愿拥有更加集成的解决方案。

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

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

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

7 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

更多详情here.

答案 2 :(得分:2)

  • 我发现以下文件夹层次结构很有用。创建代码和测试作为ProjectFolder的子文件夹。创建2个解决方案代码\ Project.sln和tests \ Tests.sln。现在为每个创建的类库或可执行文件,例如Customers.dll有相应的测试dll。所以code \ Customers \ Customers.csproj将有test \ Customers \ TestCustomers.csproj,它引用了前者。
  • 将CPPUnit集成到Visual Studio中将在“项目属性”中选择正确的应用程序。“调试”设置。我认为this page has what you need可以在IDE中进行单键按键测试执行+报告。

答案 3 :(得分:2)

以下是我的工作:

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

就个人而言,我认为测试框架(Google Test,Boost测试,CppUnit等)并不重要。大多数功能相当于功能。

我对生成的项目数量并不完全满意,但我认为这是一个Visual Studio GUI问题,从某种意义上讲,将这些项目包含在内是非常有用的,例如调试等目的。

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

看看CUnitWin32。还有一个例子。