有你,你如何做C ++自动测试?

时间:2010-05-26 15:59:34

标签: c++ autotest

就自动测试而言,你如何为C ++程序做自动测试?有没有可用于单元测试和集成测试的自动测试框架?

5 个答案:

答案 0 :(得分:4)

你在谈论自动测试ala Ruby Autotest吗?如果是这样,也许Watchr会对你有用。是的,您需要在开发计算机上安装Ruby运行时,但看起来它几乎可以触发在文件系统更改时可以在命令行上完成的任何事情。例如,如果您希望Watchr在源树中的.c / .cpp / .h / .hpp文件发生更改时构建并运行C ++测试,则可以执行以下操作:

watch('src/(.*)\.[h|cpp|hpp|c]') {system "build/buildAndRunTests.bat"}

这个特殊命令显然会对你的构建过程如何设置做出一些假设(显然你是在Windows上),但这应该是它的要点。我们的团队使用构建后事件配置我们的单元测试项目,该事件自动运行构建的单元测试二进制文件,因此我们可以在buildAndRunTests.bat脚本中触发构建过程的那一部分,并将结果打印到命令-线。可能需要一些调整,但看起来Watchr可能是一个不错的选择。当我试一试时,我会更新这个回复(希望在下周初)。

更新:我刚试过一个C#项目并在那里工作。所以我理论上它也应该适用于C ++项目。

autotest.watchr

watch('./.*/.*\.cs$') {system "cd build && buildAndRunTests.bat && cd ..\\"}

请注意正则表达式末尾的 $ 。这很重要,因为在构建时源树中生成了很多工件,如果它们中的任何一个与字符串 .cs 匹配,它将触发另一次运行,从而有效地导致无限循环。可以想象,如果您在构建时生成/修改任何源文件,那么您可能必须找到一种补偿方法。

buildAndRunTests.bat

pushd ..\
rem Build test project
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" Tests.Unit\Tests.Unit.csproj /rebuild Release
popd

rem Navigate to the directory containing the built files
pushd ..\Tests.Unit\bin\Release
rem Run the tests through nunit-console
..\..\..\Dependencies\NUnit-2.5.5-bin\net-2.0\nunit-console.exe Tests.Unit.dll /run=Tests.Unit
popd

然后,在单独的控制台窗口中,只需导航到项目目录并运行以下命令(假设 autotest.watchr 位于项目树的顶部,请参见下文):

watchr autotest.watchr

现在,当源树中的任何.cs文件发生更改时,它将自动运行 buildAndRunTests.bat 脚本。这只是我本地机器的一个例子,所以它很可能不会逐字逐句,但你应该能够根据自己的需要进行调整。

这是参考目录结构:

/Project
  /build
    buildAndRunTests.bat
  /Tests.Unit
  /Dependencies
    /NUnit-2.5.5-bin
      /net-2.0
        nunit-console.exe
  autotest.watchr

我希望这会有所帮助。

答案 1 :(得分:0)

xUnit系列可用于单元测试。它适用于普通C ++代码(CPPUNIT)和.Net代码(NUnit)。

答案 2 :(得分:0)

Boost有test library你可以看看周围的其他人。

答案 3 :(得分:0)

您可以使用NUnit来实现这一目标,但可能有更好的方法。使用NUnit,您将在托管C ++ / CLI中编写测试类,该类调用您的C ++代码,该代码可能以非托管方式运行。因此,对于此选项,您的某些C ++代码现在仅为了使用NUnit而以托管方式运行。人们可能会争论这种方法的“纯度”。另一个问题是将调试器附加到NUnit(当然启用了托管/本机)并尝试以合理的方式逐步执行托管C ++ / CLI位。尽管如此,我们的办公室已经使用NUnit进行C ++单元和集成测试了一段时间。

刚刚看到@ Patrick关于CPPUnit的回答,我将不得不关注它。

答案 4 :(得分:0)

上次我在Qt工作时,我使用Qt的QTestLib进行单元测试。它确实适合我的低保真需求。 http://doc.qt.nokia.com/4.6/qtestlib-manual.html