2014-12-04 62 views
10

我正在進行單元測試的代碼是指app.config文件中的一個appsetting。爲了迎合這個,我已經添加了一個app.config文件到我的單元測試項目。如果我單擊單元測試會話窗口中的「運行所有測試」圖標,我的所有測試都會通過。爲什麼當使用鍵盤快捷鍵命令單擊Resharper「運行所有測試」按鈕時,會得到不同的行爲?

我已經將「ReSharper.ReSharper_UnitTest_RunSolution」命令映射到了Ctrl + Shift + Alt + U。如果我按這個組合運行測試,測試全部運行,但它們無法找到appsetting,它通過爲空。

我假設這意味着按鈕單擊運行在測試項目的上下文中,而命令不會,但我不能完全弄清楚命令正在做什麼。

我映射了錯誤的命令嗎?

編輯1:我一直在使用鍵盤快捷鍵Alt-RUN(ReSharper的>單元測試>運行所有),以及手動單擊菜單也試過,結果發現,這也導致所有單元測試不是找到appsetting,因此失敗。單擊單元測試會話中的運行所有測試圖標(雙綠色箭頭)繼續正常工作。

編輯2:我意識到我應該嘲笑一個單獨的類,從配置文件中取回appsettings,所以這就是我現在正在做的。所以,現在單元測試時不會依賴配置文件。

回答

3

這裏有兩件事情。首先,會話窗口中的運行全部測試圖標在會話中運行所有測試,而運行所有測試菜單項在解決方案中運行所有測試。有點混淆,他們有相同的名字,但根據上下文確實有意義。這就是他們給出不同結果的原因。

其次,在解決方案中運行所有測試時,可能找不到應用程序設置。這是由於測試運行器在同一個AppDomain中運行所有測試所做的優化。這樣可以避免爲每個程序集創建新的AppDomain,但缺點是隻有一個app.config將用於所有程序集。如果它選錯了,你的應用程序設置就會丟失。

您可以通過取消選中ReSharper»選項»單元測試»「爲每個測試程序使用單獨的AppDomain」來禁用此功能。理想情況下,它應該被禁用,如果任何項目有一個app.config - 我已經添加了一個功能請求,你可以投票和跟蹤:https://youtrack.jetbrains.com/issue/RSRP-428958

+0

謝謝你的答案 - 使完美的感覺 - 有一些賞金!最後,我意識到構建我的測試最可靠的方法是使用模擬應用程序配置讀取器並僞裝設置。 – 2014-12-16 14:11:46

相關問題