2010-11-11 41 views
12


我有一個單元測試方法,用於測試控制器的操作方法。操作方法使用資源文件來獲取靜態消息。未在單元測試用例中加載「App_GlobalResources」

message = Resources.MyResource.MemberNotVerified; 

然而,在這條線拋出的異常是: -

「無法加載文件或程序集‘App_GlobalResources文件’或它的一個依賴系統找不到指定文件」:」 App_GlobalResources「System.IO.IOException {System.IO.FileNotFoundException}

我試着應付我的測試項目中的整個資源文件,但它不成功。
任何想法的朋友。

回答

18

在幕後,App_GlobalResources文件使用HttpContext.GetGlobalResourceObject

當然,還有在單元測試中沒有HttpContext的(除非你的嘲諷吧)。

如果你是如此傾向於嘲笑它,菲爾哈克有一個像樣的職位上here

還有另一種解決方案,那就是將RESX文件移出常規目錄。

Scott Allenhere上有一個帖子。

+1

這是Scott Allen,而不是Scott Guthrie :) – OdeToCode 2010-11-11 20:49:59

+1

@OdeToCode - 該死,編輯 - 我不得不刪除我的妙語。 :) – RPM1984 2010-11-11 22:48:46

+1

首先嚐試從哈克模擬器,但這並沒有爲我工作(很快)。絕對讀了斯科特的帖子!結論:不要使用特殊的文件夾(如App_GlobalResources) – Jowen 2014-06-04 12:15:38

3

另一種方法是更改​​您生成的資源文件的類型。

我希望有設置它的其他方式,但我們設置文件屬性如下設置(右鍵單擊在Solution Explorer中的文件,並選擇屬性):

  • 生成操作:嵌入式的資源
  • 複製到輸出目錄:不復制
  • 自定義工具:PublicResXFileCodeGenerator
  • 資源:資源
+0

不錯的主意,但它有一個缺點:發佈你的web應用程序時,該文件不再被複制,導致'<%$ Resources:...%>表達式失敗。您需要在每次部署後手動複製文件。 – Heinzi 2016-02-18 09:11:36