2013-01-21 38 views
1

在我們的持續集成設置中,我想設置CruisControl.NET來自動運行我們所有的單元測試。但是,我不想在配置中單獨指定每個unittest dll。我該如何讓CruiseControl.NET/nant運行後綴.Test的所有Unittest項目?

所有unittest項目都是後綴.Test(並且所有非單元測試項目都不是)。我如何配置CruiseControl.NET來運行這些項目中的所有unittests(我正在使用CruiseControl.NET的v1.5.7256.1)?

我目前的配置嘗試:

<nunit> 
    <path>$(nunit.path)</path> 
    <assemblies> 
     <assembly>$(working.dir)\**\*.Test.dll</assembly> 
    </assemblies> 
</nunit> 

我發現很難找到這個特定的NUnit元素上的文檔。我可以找到的大多數頁面都使用execnunit2或其他nunit元素或nunit-console commandline options

我沒有太多的管理構建環境的經驗,並且正在處理現有配置,其中每個組件都是按照以下方式單獨指定的。

<nunit> 
    <path>$(nunit.path)</path> 
    <assemblies> 
     <assembly>$(artifact.dir)\test1.dll</assembly> 
     <assembly>$(artifact.dir)\test2.dll</assembly> 
    </assemblies> 
</nunit> 

因此,我嘗試使用通配符失敗。

編輯:

這裏是我的配置文件中的一些額外的XML顯示上下文一點點:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> 
    <project name="MyProject"> 
     <!-- whole bunch of other elements --> 
     <tasks> 
      <nunit> 
       <!-- see above --> 
      </nunit> 
     </tasks> 
    </project> 
</cruiscontrol> 

Mightmuke的建議後,我試圖與他的建議更換<nunit>元素,但得到以下例外:Unable to instantiate CruiseControl projects from configuration document. Configuration document is likely missing Xml nodes required for properly populating CruiseControl configuration. Unable to load array item 'property' - Cannot convert from type System.String to ThoughtWorks.CruiseControl.Core.ITask for object with value: ""

然後我試圖移動<property><foreach> elemen t在元素外面。然後我得到的例外:Unused node detected: <property name="nunit.filelist" value="" />

我現在試圖找出更多關於<foreach>元素和我可以把它放在哪裏,但不知何故,我發現很難找到任何有關它的文檔。

EDIT2:

我發現我使用的NUnit的任務的文檔:http://ccnet.sourceforge.net/CCNET/NUnit%20Task.html

我指定是String類型[]的元素。我不確定這意味着什麼...但從示例中可以看出,它只是意味着它必須包含一個以單數形式表示的同名子元素列表。


PS:我知道這個問題是有點失控......當整個事情解決了,我會嘗試這樣的形式來編輯它,以便它可能對別人有用後來。

+0

可能不是你螞蟻聽到的,但是nunit任務已被棄用,以支持nunit2任務。不過,我建議你使用最新版本的nunit的nunit控制檯命令行選項,並將過濾的文件列表作爲參數傳入。如果這是您的一個選擇,我可以舉一個例子。 – Mightymuke

+0

@Mightymuke這是我的一個選擇。我真的很感激這個例子。我想知道,不贊成的[nunit任務](http://nant.sourceforge.net/nightly/latest/help/tasks/nunit.html)似乎與我使用的API不同。我沒有看到在那裏解釋的元素。我在看錯文檔嗎? –

+0

您使用[nauckit nant任務](http://dev.nauck-it.de/projects/utilities/wiki/NAntTasksNunitTest)嗎?如果是這樣,您可以使用[AssemblyFileSet](http://nant.sourceforge.net/release/latest/help/types/assemblyfileset.html),但我的偏好仍然是nunit控制檯選項。 – Mightymuke

回答

1

這是一個示例配置,如果您要使用nunit控制檯。

<property name="nunit.filelist" value="" /> 
<foreach item="File" property="testfile" verbose="true"> 
    <in> 
    <items basedir="."> 
     <include name="${working.dir}\**\*.Test.dll" /> 
    </items> 
    </in> 
    <do> 
    <property name="nunit.filelist" value="${nunitfile.list + ' ' + testfile}" /> 
    </do> 
</foreach> 

<exec program="nunit-console-x86.exe" failonerror="true" verbose="true"> 
    <arg value="${nunit.filelist}" /> 
    <arg value="/xml=nunit-results.xml" /> 
    <arg value="/nologo" /> 
    <arg value="/nodots" /> 
</exec> 

這尚未經過測試,並且有可能更好的方法對皮膚,但它有望爲你提供了一個起點。

+0

我會嘗試這個並報告回來。 –

+0

對不起,延遲了,有點忙亂。我用你的xml取代了我的xml,但它看起來並不匹配1對1。我收到以下異常:'無法從配置文檔實例化CruiseControl項目。 配置文檔很可能缺少正確填充CruiseControl配置所需的Xml節點。 無法加載數組項'屬性' - 無法從類型System.String轉換爲ThoughtWorks.CruiseControl.Core.ITask,以獲得值爲「」的對象。這個XML在''元素內。 –

+0

我也嘗試將''和''元素移動到''元素之外。然後我得到異常:'檢測到未使用的節點:'。我將繼續努力做到這一點,一旦我做對了,我會報告回來。 –

相關問題