我有兴趣听听使用TDD和使用Visual Studio 2005(专业版)的C ++单元测试的经验
首先是一些背景。我们有一个相当大的项目,其中大部分是在使用CppUnit进行单元测试的Linux上开发的。该项目分为几个库,每个库都有自己的一组测试。我有一个简单的脚本编译库,编译测试套件然后运行测试。因此,在对代码进行更改后,我只需从命令行运行“test”并运行测试。
现在,大多数开发人员都在Windows上使用Visual Studio 2005来开发此产品。当然,他们仍然可以使用nmake从命令行运行测试,但需要额外的步骤,我宁愿拥有更加集成的解决方案。
所以我的问题有两个部分。
首先,在大型代码库上布置测试代码的最佳方法是什么?在解决方案中创建多个测试项目是否正常,每个库一个?
其次是否有任何工具可以将CppUnit测试集成到Visual Studio中?如果设置了依赖关系,则运行测试项目应该运行测试,但目前结果仍然出现在命令窗口中。
我公司的其中一个项目就是这样做的。我们使用一个名为CXXTest的单元测试框架(http://cxxtest.sourceforge.net/guide.html)。我们非常喜欢这个C ++框架,因为它只需要你编写一个包含单元测试的头文件。 .CPP文件由脚本创建(提供Python和Perl脚本)。
我们通过提供构建单元测试(如果需要构建)的后构建步骤与visual studio集成,然后执行它们。输出(显示传递的内容和失败的内容)显示在输出窗口中 - 您永远不需要离开IDE。
我使用Boost Test框架。我倾向于将我的代码拆分为.lib文件,并且每个文件都有一个单独的控制台模式EXE测试项目。构建测试项目时,它使用“Post build stage”来启动自身,从而运行测试。您可以使每个测试项目成为主应用程序的依赖项,以便每次构建时,所有测试都先运行,但这可能非常耗时。相反,我倾向于根据需要手动运行测试项目,但我的自动夜间构建系统将自动运行所有测试项目(我编写脚本,如果任何测试失败,构建失败,我收到电子邮件通知)。
更多细节 这里。
这是我做的:
- 在主解决方案中创建一个测试可执行项目,该项目仅使用来自单元,单元测试和测试框架的源。
- 使测试运行器在成功运行测试时生成文本文件,因此visual studio可以跟踪依赖关系。
- 添加项目以启动测试运行器并生成测试文件。这意味着您现在每次测试都有两个项目。
- 使测试运行器成为包含该单元的库的依赖项。
就个人而言,我认为测试框架(Google Test,Boost测试,CppUnit等)并不重要。大多数功能相当于功能。
我对生成的项目数量并不完全满意,但我认为这是一个Visual Studio GUI问题,因为将这些项目包含在这样的调试等目的中实际上非常有用。
我尝试使用post构建步骤来运行测试但不幸的是,这意味着在第一次失败后,构建没有中断。
我公司的其中一个项目就是这样做的。我们使用一个名为CXXTest的单元测试框架(http://cxxtest.sourceforge.net/guide.html)。我们非常喜欢这个C ++框架,因为它只需要你编写一个包含单元测试的头文件。 .CPP文件由脚本创建(提供Python和Perl脚本)。
我们通过提供构建单元测试(如果需要构建)的后构建步骤与visual studio集成,然后执行它们。输出(显示传递的内容和失败的内容)显示在输出窗口中 - 您永远不需要离开IDE。
我使用Boost Test框架。我倾向于将我的代码拆分为.lib文件,并且每个文件都有一个单独的控制台模式EXE测试项目。构建测试项目时,它使用“Post build stage”来启动自身,从而运行测试。您可以使每个测试项目成为主应用程序的依赖项,以便每次构建时,所有测试都先运行,但这可能非常耗时。相反,我倾向于根据需要手动运行测试项目,但我的自动夜间构建系统将自动运行所有测试项目(我编写脚本,如果任何测试失败,构建失败,我收到电子邮件通知)。
更多细节 这里。
这是我做的:
- 在主解决方案中创建一个测试可执行项目,该项目仅使用来自单元,单元测试和测试框架的源。
- 使测试运行器在成功运行测试时生成文本文件,因此visual studio可以跟踪依赖关系。
- 添加项目以启动测试运行器并生成测试文件。这意味着您现在每次测试都有两个项目。
- 使测试运行器成为包含该单元的库的依赖项。
就个人而言,我认为测试框架(Google Test,Boost测试,CppUnit等)并不重要。大多数功能相当于功能。
我对生成的项目数量并不完全满意,但我认为这是一个Visual Studio GUI问题,因为将这些项目包含在这样的调试等目的中实际上非常有用。
我尝试使用post构建步骤来运行测试但不幸的是,这意味着在第一次失败后,构建没有中断。
我的团队目前正在使用一个系统,我们有一个自动夜间构建(也可以从任何人的项目构建仪表板运行),其中包括VS2k5“测试”解决方案。测试解决方案包含所有单元测试项目;一个单元测试项目,用于主项目中的每个“单元”代码。
当自动构建运行时,它构建主要解决方案,然后构建测试解决方案,最后运行测试解决方案生成的所有可执行文件(Perl脚本将其粘合在一起)。编译结果以及测试执行(EXIT _ SUCCESS,EXIT _ FAILURE)用于更新项目构建仪表板。
EXIT _ FAILURE技巧也可以应用于主项目的自定义构建步骤:如果单元测试自定义构建步骤返回EXIT _ FAILURE,那么构建本身就会失败。
您还可以使用托管C ++在Visual Studio中使用内置的单元测试框架编写单元测试。