2010-07-13 40 views
2

我負責維護大型項目的msbuild腳本。 該解決方案包含大約90個項目,每個項目都有自己的測試項目。MSTest + MSBuild +許多測試項目

作爲生成過程的一部分的所有測試項目agregated和MSTEST被調用一次:

mstest /textcontainer:project1 /testcontainer:project2 ... 

這不再是一個可行的解決方案作爲構造的命令,目前約12,000個字符長超過最大長度爲一個命令。

我們有幾種選擇:

  1. 創建自定義任務分割的邏輯位置的項目清單,並呼籲MSTEST兩次。
  2. 爲每個測試項目調用一次mstest。

對任一選項有沒有優點/缺點?或者可能的替代方案?注意:我無法對項目體系結構進行更改,只能修改構建腳本。

回答

0

警告:我不熟悉MSTest,但通常會使用構建自動化。在一個地方

原因從單個測試運行

  • 更容易通過運行所有測試/失敗構建。
  • 避免多次產生測試跑步者的開銷。
  • 報告工具可能需要單個報告的單個位置(文件)中的所有測試結果。

原因從自己的測試運行器運行的每個測試的測試項目

  • 的配置更加簡單。
  • 更容易/更快地重新運行一組給定的測試。
  • 測試跑步者可以分佈在多個服務器上以加速測試。

只要你能夠聚集所有的測試結果爲一份報告這不要緊,你的團隊,我會爲精細建議拆分出來的東西越好(下一個測試運行每個測試項目如果可行)。

如果您已經購買了整個MS Team Foundation Server和MS Test Manager工具集,我認爲它將支持廣泛的測試選項;像加利奧這樣的其他框架可能會適合您的需求,而不需要太多的成本或開銷。

參考

0

也許太晚了,我想在一年內您有時間來解決這個問題?但以防萬一:

a)不是每個項目都有一個測試項目,而是將所有測試放在一個項目中(如果您想單獨運行集成測試,則可能需要兩個測試)。這樣可以減少(一半)項目的數量。 b)如果不可行,那麼在tfsbuild.proj中應該有一個名爲TEST ARGUMENTS的部分。您可以添加一個ItemGroup。這裏是我在我的項目中使用的一個:

<ItemGroup> 
<!-- If Normal build run UnitTests + Integration tests--> 
<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.UnitTests.dll" /> 
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.UnitTests.dll" /> 
<TestContainer Include="$(OutDir)\Rbi.Viper.Controls.Test.UnitTests.dll" /> 
<TestContainer Include="$(OutDir)\Rbi.Viper.RestfulServicesMvc.Tests.dll" /> 

<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.IntegrationTests.dll" /> 
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.IntegrationTests.dll" /> 
</ItemGroup>