2009-01-27 37 views
18

我目前正試圖從NCover運行MSTest.exe,但我相信這個問題通常可以應用於從命令行運行MSTest.exe。MSTest.exe找不到app.config

如果我有「/ noisolation」參數,那麼MSTest.exe似乎會按預期找到並使用app.config。沒有它,NCover不會捕獲任何覆蓋信息。從我的研究到目前爲止,似乎NCover需要/不需要隔離。所以問題是如何讓我的* .config文件在傳遞參數時工作。

我NCover設置:

應用簡介
C:\ Program Files文件(x86)的\微軟的Visual Studio 9.0 \ Common7 \ IDE \ MSTest.exe

工作文件夾
C:\ Documents and Settings \ MyProfile \ My Documents \ Visual Studio 2008 \ Projects \ XYZ \ XYZ.CoreTest \ bin \ Debug

個應用參數
/noisolation/testcontainer: 「C:\ Documents和Settings \我的資料\我的文檔\ Visual Studio 2008的\項目\ XYZ \ XYZ.CoreTest \ BIN \調試\ XYZ.CoreTest.dll」



更新:我添加了一條跟蹤,顯示我的配置是(不奇怪)嘗試從「C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ MSTest.exe.Config」中讀取。

更新2:如果可能,我不想編輯MSTest.exe.Config。這不是非常便攜的。

+0

相關:http://stackoverflow.com/questions/4811778/mstest-and-app-config-issue(包含一個潛在的解決方法) – 2015-07-02 07:23:54

回答

12

從克雷格斯頓茨在評論在link text

如何使用MSTest的做到這一點。

  1. 在Solution Explorer中,右鍵單擊Solution(不是項目)。

  2. 單擊添加,新項目

  3. 在類別中,選擇測試運行配置

  4. 現在選擇的測試運行配置項,並將其添加到您的項目

  5. 在解決方案資源管理器中,雙擊 - 單擊剛剛創建的測試運行配置

  6. 單擊部署項目

  7. 添加您的配置文件作爲部署文件(或部署其包含它的整個文件夾,如果合適的話)

這花了我一些時間來弄清楚,但我在一個類似的情況它確實對我有用。

5

在visual studio中,將App.config文件標記爲屬性CopyAlways。 (右鍵點擊文件,選擇屬性進入屬性面板)

+0

這樣做,(重命名)app.config是在我的輸出文件夾右在大會旁邊......這就是它一直在做的事情。我的應用程序仍在嘗試讀取MSTest.exe.config而不是MyAssembly.dll.config。如果我省略/ noisolation開關,它會讀取正確的文件。 – Larsenal 2009-01-29 22:55:59

+0

剛剛遇到同樣的問題,這對我來說很好。謝謝! – 2011-09-14 14:43:07

+0

簡單的方法! +1 – Vielinko 2018-02-22 14:05:28

0

我從來沒有使用過NoIsolation,但如果我正確地理解它,它會在MSTest類中運行所有的測試代碼。這樣做,它確實應該讀取MSTest的App配置。如果你堅持使用noisolation,我想你將不得不將你的App.config合併到MSTest.exe.config中。當然,這是一個黑客。

完全避免隔離可能會更好。如果是由於錯誤,請儘可能修復錯誤。如果重新組織(重大重構)您的應用程序是不可能的,解決錯誤。我不確定優雅替代。

我發現「我想我們需要找到這個問題的根本原因,以避免noisolation開關,你可能需要修改你的應用程序。是否有可能創建一個簡單的解決方案,repro相同的問題?「在this URL

+0

如果是這樣的話,那麼也許我真正的問題是如何讓NCover無需/不隔離地正確使用MSTest.exe。 – Larsenal 2009-01-30 00:22:57

+0

只是一些想法;抱歉,他們聽起來很關鍵。不是故意的。 如果您使用團隊系統,也許您可​​以使用taht的代碼覆蓋範圍? http://blogs.vertigosoftware.com/teamsystem/archive/2006/02/06/nUnit_and_Team_System_Code_Coverage.aspx – 2009-01-30 04:36:38

1

有一種技巧,您可以將配置文件的內容組合起來,詳細說明如下:here。您可以在MSTest.exe.Config中添加一個固定文件inlcude行,然後將您的應用程序的app.config複製到該固定文件位置。這很醜陋,但比針對每種不同情況的MSTest.exe.Config更具可移植性。

-2

好吧,我冒着風險將我的文章轉換爲單元測試flamewar,但我認爲問題是您的測試,甚至可能是您的代碼。你應該重構。

單元測試應該是原子的。單個測試應該沒有外部依賴關係,並且配置文件這樣的依賴關係。沒有測試應該依賴於配置文件。

如果您正在測試使用配置文件中的信息的方法,請重構您的代碼,以便配置的信息在方法外部讀取並傳遞給方法或在調用方法之前設置爲屬性。這樣,您的測試可以將值傳遞給方法,也可以在測試設置期間設置屬性。

如果你需要你的app.config數據庫連接字符串,你是你自己的。 DAL非常難以進行單元測試。如果是用於Web服務連接字符串,請不要使用它 - 模擬接口。

0

若要清除混淆: 不使用/ noisolation =如果它找到SameNameAsYourDll.dll.config文件,它將自動部署在測試dll中,並將用於應用程序域的應用程序配置運行該程序集中的測試

using/noisolation =我們在測試之間進行的所有隔離,您,主機進程和其他所有內容都在窗口外。我們仍然可以做一些隔離,但是您沒有獲得應用程序域對測試dll唯一的附加好處。因此,你的DLL的配置將無濟於事。

1

我在詹金斯的相同問題與MSTestRunner Plugin構建。檢查從配置頁面忽略NoIsolation解決了問題。

0

試着改變它的名字從app.configprojectname.extension.**config**

例如,如果有一個名爲proj1一個單元測試項目並使用其dll,重命名app.configproj1.dll.config

這爲我工作。