2010-05-26 64 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 

我希望這有助於。