Dot-Net
你如何起訂一個生活在 App_GlobalResource 中的 .resx?
我正在為 MVC3 Web 項目中的控制器編寫單元測試,但是當我的測試嘗試訪問這樣的資源時會拋出異常:
return Index(Resources.Strings.MyStringResource);該資源是一個
.resx名為Strings.我正在使用Moq庫來實現
HttpContextBase功能的單元測試,所以我想知道如何使用 Moq 庫來訪問 App_GlobalResource。任何幫助或指示將不勝感激!
你不能,至少不能直接。從資源 (.resx) 文件生成的強類型類公開靜態方法,而不是實例方法。
因此,它們不能實現介面方法,也不是虛擬的;Moq要求至少滿足其中一個條件才能創建模擬。
為了解決這個問題,您將創建一個抽象,就像其他任何東西一樣:
public interface IResources { string MyStringResource { get; } }您可以將它的實現傳遞(或註入)到您的控制器中,然後將其傳遞給您的
Index方法。該實現可能如下所示:public class ResourcesWrapper : IResources { public string MyStringResource { get { return Resources.Strings.MyStringResource; } } }然後,當您進行測試時,您可以使用 Moq 創建
IResources介面的模擬,並將其傳遞給您的控制器,如下所示:// Create the mock. var mock = new Mock<IResources>(); // Setup the property. mock.SetupProperty(m => m.MyStringResource, "My Mocked Value"); // Pass the object somewhere for use. Assert.AreEqual(mock.Object.MyStringResource, "My Mocked Value");