2010-05-26 33 views
0

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

+4

你是什么意思“自动测试” - 这是我以前从未遇到过的一个术语。 – 2010-05-26 16:12:29

+0

“autotest”由编译器和链接器完成:自动语法检查,自动符号声明和定义,自动存储,自动查找不可到达的代码等。 您还想要什么自动? – jpinto3912 2010-05-26 16:58:22

回答

0

你可以使用NUnit来实现这一点,但可能有更好的方法。使用NUnit,您正在编写托管C++/CLI中的测试类,该C++/CLI调用您的C++代码,该代码可能以非托管方式运行。所以对于这个选项,为了使用NUnit,一些C++代码现在像托管一样运行。有人可能会辩论这种方法的“纯粹性”。与此相关的另一个问题是将调试器附加到NUnit(当然启用了托管/本机),并试图以合理的方式逐步执行托管的C++/CLI位。尽管如此,我们的办公室一直在使用NUnit进行C++单元和集成测试。

刚才看到@帕特里克关于CPPUnit的回答,我必须看看。

0

xUnit系列可用于单元测试。它存在于纯C++代码(CPPUNIT)和.Net代码(NUnit)中。

+1

还有CxxTest,Boost Test和CppUnit以外的其他很多框架 – Glen 2010-05-26 16:54:24

4

你在说自动测试ala Ruby Autotest?如果是这样,也许Watchr会为你工作。是的,您需要在您的开发机器上安装Ruby运行时,但它看起来好像可以触发文件系统更改时在命令行上执行的任何操作。例如,如果你想Watchr来构建和运行C++测试随时随地一.C /的.cpp/.H/.HPP在源树文件改变,你可以做这样的事情:

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

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

UPDATE:我刚刚尝试了这一点与我的C#项目之一,并得到它在那里工作。所以我理论上也应该用C++项目来工作。

autotest.watchr

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

注意在正则表达式的结尾$。这很重要,因为在构建时在源代码树中会生成大量工件,并且如果它们中的任何一个与字符串.cs匹配,它将触发另一次运行,从而导致无限循环。可以想象,如果您在构建时生成/修改任何源文件,则会发生同样的情况,因此您可能需要找到一种补偿方法。

buildAndRunTests。蝙蝠

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 

我希望这有助于。