2014-08-29 70 views
1

我正在幫助一個團隊由於測試失敗而開始失敗。此配置來自哪裏?

失敗是由於缺少連接字符串配置引起的。我檢查了關於配置文件的常見問題,以確保連接字符串的名稱完全正確。

最後,我獲得了配置文件的完整路徑,以檢查構建服務器上是否包含預期的確切配置。

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

的路徑沒有指向TestProject.exe.config文件,而是指着vstest.executionengine.x86.exe.Config在以下位置:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.Config 

此文件不包含連接字符串的。

當我寫出所有從配置可用的連接字符串,我得到的默認連接字符串:

名稱:LocalSqlServer連接:數據源= \ SQLEXPRESS;集成 安全性= SSPI; AttachDBFilename = | DataDirectory | aspnetdb.mdf;用戶 Instance = true。中止測試執行。

這是來自machine.config文件(榮譽petelids)。

因此,最大的問題是:

爲什麼vstest.executionengine.x86.exe.Config被使用,而不是app.config(在運行時TestProject.exe.config)? (我可以猜測這是因爲運行的進程是測試運行器,但我認爲可以公平地說,測試運行器會讓測試項目使用自己的配置文件,這是正常情況)。

+0

只是一個猜測可能是它在註冊表中定義 – 2014-08-29 11:06:08

+1

也許它來自machine.config文件? - 適用於64位的'%windir%\ Microsoft.NET \ Framework \ [版本] \ config \ machine.config'或'%windir%\ Microsoft.NET \ Framework64 \ [版本] \ config \ machine.config' – petelids 2014-08-29 11:21:23

+0

@ petelids - 現貨。這是因爲'vstest.executionengine.x86.exe.Config'中沒有連接字符串 - 那麼爲什麼它使用'vstest.executionengine.x86.exe.Config'而不是app.config來進行測試項目? – Fenton 2014-08-29 12:45:55

回答

0

MSTest的通過運行在隔離模式測試默認。

此問題的解決方案是添加一個新的測試項目並將測試移入其中。

新項目的行爲與所有其他項目一樣,在獨立進程中運行測試並使用測試項目中的app.config文件。

我把這個問題歸結爲一個怪癖。

0

我認爲這是公平地說,你所期望的測試運行,讓測試項目中使用它自己的配置文件,這就是通常發生

與NUnit的工作時,是完全正確的假設,xUnit等,但不適用於Microsoft測試運行器(MSTest和VSTest)。他們只是忽略目標程序集配置文件並使用他們自己的配置。

有兩個辦法解決這個問題:

  • 變化MSTest的到的NUnit或xUnit的
  • 使用自定義配置文件(而不是默認的)
+0

我的印象是你不得不顯式傳遞一個標誌,使測試運行在與MSTest相同的進程下,否則默認運行它們:'/ noisolation:在MSTest.exe進程中運行測試。此選擇可以提高測試運行速度,但會增加MSTest.exe進程的風險。http://msdn.microsoft.com/en-us/library/ms182489.aspx – Fenton 2014-08-29 14:29:51

+0

是的,但它會啓動將使用自己的配置的新進程文件。 – Novakov 2014-08-29 14:36:08