我有兴趣了解使用TDD和使用Visual Studio 2005(专业版)进行C ++单元测试的经验
首先是一些背景。我们有一个相当大的项目,其中大部分是在Linux上使用CppUnit开发的,用于单元测试。该项目分为几个库,每个库都有自己的一组测试。我有一个简单的脚本编译库,编译测试套件然后运行测试。因此,在对代码进行更改后,我只需从命令行运行“test”并运行测试。
现在,大多数开发人员都在Windows上使用Visual Studio 2005来开发此产品。当然,他们仍然可以使用nmake从命令行运行测试,但需要额外的步骤,我宁愿拥有更加集成的解决方案。
所以我的问题有两个部分。
首先,在大型代码库中布置测试代码的最佳方法是什么?在解决方案中创建多个测试项目是否正常,每个库一个?
其次是否有任何工具可以将CppUnit测试集成到Visual Studio中?如果设置了依赖关系,则运行测试项目应该运行测试,但目前结果仍然出现在命令窗口中。
答案 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)
答案 3 :(得分:2)
以下是我的工作:
就个人而言,我认为测试框架(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。还有一个例子。