2008-09-21 73 views
11

我有兴趣听听有关使用TDD和Visual Studio 2005(专业版)C++进行单元测试的经验如何将TDD方法与VisualStudio集成?

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

,大多数的开发者在Windows上使用Visual Studio 2005中的该产品的开发。当然,他们仍然可以使用nmake从命令行运行测试,但涉及额外的步骤,我宁愿有一个更集成的解决方案。

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

首先,什么是铺设用于测试的代码在一个大的代码库的最佳方式?在解决方案中创建多个测试项目是正常的,每个库都有一个?

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

回答

1

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

当自动构建运行时,它建立主溶液,然后将试验溶液,最后运行由试验溶液(Perl脚本胶水此一起)中产生的所有的可执行文件。编译结果以及测试执行(EXIT_SUCCESS,EXIT_FAILURE)用于更新项目构建仪表板。

那个出口_故障伎俩也可以适用于主体工程的自定义生成步骤:如果单元测试自定义生成步骤返回退出_故障,则构建本身失败。

+0

我们还使用CruiseControl,以便在每次提交到源代码管理系统后运行所有测试。然而,我正在寻找一些东西供开发人员在开发时作为编辑测试循环的一部分使用。 – 2008-09-22 00:10:34

2

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

更多细节here.

3

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

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

1

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

+0

不幸的是,我们有VS2005专业版,而不是Team版,所以我不认为它有测试框架。此外,我们已经使用CppUnit编写了> 10,000个测试。 – 2008-09-22 09:22:55

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

这里是我做的:

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

就我个人而言,我认为测试框架(谷歌测试,升压测试,CppUnit等)并不重要。大部分功能相当。

我不是生成的项目的数量完全满意,但我认为这是一个Visual Studio的图形用户界面的问题,在某种意义上说,它实际上是相当有用的,这些项目包括像这样的目的,如调试。

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

+0

为什么选择投票? – 2009-03-04 19:44:15