2013-11-23 74 views
2

我想創建一個自定義的TestRunner允許用於以下單元框架運行單元測試:選擇性測試運行的NUnit的,MSTest的和的xUnit

  • MSTest的
  • NUnit的
  • 的xUnit

這個自定義測試運行器應該有定義標準來運行測試的可能性。例如:

  • 運行特定的測試方法(通過名稱)
  • 運行試驗方法具體測試方法
  • 運行試驗方法測試特定類

我發現溶液NUnit在xUnit中我應該實現ITestRunner。但是你知道我可以如何從MSTest的代碼運行測試嗎?

你知道我如何定義標準來運行只填充上面定義的標準的方法嗎?

+2

你爲什麼要手卷自己的?爲什麼你想以編程方式做到這一點? JetBrain的Resharper支持所有上述測試。現在VS2013支持(如果您安裝必要的適配器),您可以選擇性地運行每個測試或運行所有測試。 – Spock

+0

我不想自己做這件事,但我不知道我現在怎麼能得到這個功能。所以最後可能需要創建自己的lib來實現這一點。是的,我可以使用上面提到的方法之一從IDE執行此操作,但我必須在代碼中執行此操作。原因是我的程序的目的。它必須加載許多解決方案並檢查某些方法的測試。如果我想在VS中檢查這個測試1000解決方案並檢查每個解決方案的1000套測試中的10個測試將會非常痛苦。 – Krzysztof

+0

府中可以做到這一點。請參閱http://bugsquash.blogspot.com/2012/06/fuchu-functional-test-library-for-net.html中的「NUnit/MbUnit測試加載」。添加MsTest應該很容易。 –

回答

5

您可以嘗試Fixie(仍在開發中)。它允許您編寫自定義約定來確定什麼被視爲測試,而不考慮使用的單元測試框架。例如,您可以編寫一個約定,將以「Tests」結尾的類中的所有無效公共方法標識爲單元測試,而不考慮屬性等等(實際上,這是它的默認約定)。它非常靈活。要編寫自定義約定,您需要在程序集中實現Convention類,Fixie會發現它。閱讀它的文檔以獲取更多信息,並查看項目中包含的優秀樣本和測試。

它已經通過TestDriven.net與Visual Studio集成。如果你沒有,那麼你需要通過它的控制檯運行器來運行它。

2

感謝您回覆我的評論。我想我可以建議你一個可能的解決方案,而我自己也沒有嘗試過。但我相信這是可行的。這個建議更多的是一種編程方法,它與您提到的每個測試框架提供的一些內置命令行選項(NUnit,MSTest,xUnit)混合在一起。

如果所有這些測試框架都具有執行測試的能力,無論是有選擇地,作爲一個組還是通過命令行作爲整個測試套件,都可以使用Console App和預定義的參數來執行這些測試測試你想要的。

據我所知,所有這些測試框架都提供了命令行測試運行器和選項。但是他們可以根據他們提供的選項來區分。

首先要分析每個測試框架的能力,提供命令行參數,以便您可以根據需要執行測試。

MSTest.exe Command Line提供了一些您可能想要查看的選項。

  • /測試

  • /分類

是一些你可以考慮的選項。

NUnit console也提供了一些選項。但我還沒有看到這一點。

XUnit has a Console Test runner你可以看看更多(即xunit.console MyTestLibrary.dll)。

請務必注意,xUnit.NET和NUnit都是可擴展的。所以如果你沒有你需要的選項,你可以看看擴展框架提供的內容。即使沿着創建自己的控制檯跑步者的路徑走並不那麼困難。不喜歡MSTest,這兩個框架都是開源的,所以你可以看到他們提供的選項。鑑於有選擇地運行測試是一個關鍵要求,我會想象這些框架具有內置選項,而且您不必執行大量定製。

一旦確定了這些框架的控制檯對應的功能,就可以繼續創建客戶端應用程序/控制檯應用程序,您可以指定測試以有選擇地運行。這個客戶端應用程序將有選擇性地向每個跑步者提供測試並執行Console.exe。這應該有選擇地運行你的測試。您可以通過提供某種可配置的元數據/清單文件來進一步自動化。例如,您可以指定要從元數據或清單文件運行的各種測試,並且控制檯運行器將從元數據文件中讀取。

根據您的客戶端應用程序配置,如果它是控制檯應用程序,則還可以通過構建系統調用。

希望這會指出你想要達到的目標。