2010-01-13 94 views
14

是否有以編程方式運行Visual Studio單元測試的API?是否有編程運行Visual Studio單元測試的API?

使用Process.Start()運行MSTests.exe在當前方案中不起作用。我正在尋找的就像NUnit SimpleTestRunner。

任何想法?

/埃裏克

+3

Duplicate http://stackoverflow.com/questions/1564681/running-vsts-tests-without-mstest-exe – 2010-01-13 07:27:49

+0

這也一直是一個煩惱,所以我提出了它作爲'用戶語音'請求。如果你正在閱讀這本書,並且感覺很強烈,你能投票嗎? https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4619858-mstest-api – 2015-08-19 10:58:39

回答

10

你是對的,mstest框架沒有公共的API。我有一天爲mstest編寫了一個手動替換程序,看看它有多困難,而且看起來並不像看起來那麼簡單(特別是如果你想利用多個CPU核心的話),所以要小心這條路。

就我個人而言,我一直以編程方式運行mstest.exe,然後解析生成的.trx XML文件。有沒有什麼特別的原因讓你無法使用Process.Start來運行它?

P.S.一些mstest.exe的怪異行爲都解決了,如果你通過了/noisolation命令行參數 - 給一個去,如果你覺得這樣的傾向:-)


更新:埃裏克提到他要運行測試API在當前線程中,他可以爲全球化問題設置線程文化。

如果您在調試器下運行單元測試,您會注意到mstest創建了一堆線程,並在不同線程中運行所有測試,所以即使您可以訪問API 。

我會建議做的是:

  1. 從測試「亞軍」的應用程序,設置環境變量
  2. MSTEST運行在特定的測試指着它
  3. 添加[ClassInitialize](或[TestInitialize])讀取此環境變量並設置文化的方法
  4. 利潤!
+0

我需要在當前線程中運行mstest,以便可以設置運行測試的文化。我們有一些文化敏感的代碼,我們希望在多種文化下運行。 什麼樣的奇怪行爲通過/ noisolation解決? – 2010-04-08 11:39:38

+0

如果你沒有設置/ noisolation,mstest創建了一大堆額外的線程和appdomains和東西。這會導致像ncover和partcover這樣的代碼覆蓋工具失敗。 – 2010-04-08 21:03:23

+0

感謝您的信息!總是很高興深入瞭解您使用的工具。因爲我們無法讓它在當前線程中運行,所以您對文化thingy的解決方案或多或少是我們最終實現的。但是,不必依靠外部信號機制就很好。 – 2010-04-09 06:33:23

0

爲什麼不使用反射,看到NUnit的SimpleTestRunner是如何運行測試......然後使用這個技術...

+0

用Reflector挖掘是一個好主意。但是,NUnit SimpleTestRunner使用任何人都可以使用的NUnit測試運行器API。問題是VSTest似乎沒有相應的API。 – 2010-02-02 19:20:14

3

採取深潛與反射到MSTest.exe後進一步進入Visual Studio單元測試堆棧,我發現MSTest所使用的API被封閉起來,並被私有化,這樣我就不能從外部使用。

0

您可以使用TFS的Microsoft REST API運行ms測試。請參閱文檔here

我已經鏈接到「調用Rest API」,以便您可以看到如何去調用TFS的REST API之一。

請注意,如果您的測試鏈接到構建,它們應該每次構建排隊時自動運行。

這是鏈接到Run Functional Tests

我也發現了一篇關於使用TFS SDK API運行測試的文章。這裏是該鏈接以及:Link to API Article

相關問題