所以我使用Moq並開始爲我的控制器動作編寫單元測試。問題單元測試一個繼承自定製基礎控制器的asp.net MVC控制器
我所有的控制器都繼承自一個基本的CustomController類,它在構造函數中提供了一個userId屬性集,以作爲Membership.GetUser()。ProviderUserKey的值。這樣我就可以簡單地通過傳遞contactId來傳遞userId到我的服務層。
這似乎並不與這個單元測試效果很好,
var serviceMock = new Mock<IFormService>();
serviceMock.Setup(g => g.GetForm(2)).Returns(new FormViewModel() {ID = 2, Name = "Mock Form"});
var controller = new FormController(serviceMock.Object);
var result = controller.Index(2);
Assert.IsNotNull(result, "View Result is null");
它輕視它試圖從Membership.GetUser()ProviderUserKey設置用戶標識的基礎CustomController例外。
「UnauthorizedAccessException:訪問路徑'C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ App_Data'被拒絕。」
是否有其他人遇到過這個問題,或者有什麼想法繞過它?
它可以幫助看到你的構造,但我的猜測是,你將需要注入模擬會員提供商,並配置DI容器根據請求使用生命週期。基本上,如果它是一個依賴項,它需要在構造器中,所以你可以在測試中控制它的行爲。見http://stackoverflow.com/questions/4193484/how-do-i-control-membershipprovider-instance-creation-lifetime – stuisme