現在我已經寫了一段時間我的域對象的測試,但我還是不太清楚如何去測試安全在我的web項目。某些環境中的某些用戶可以訪問我的模型的某些屬性等,但是您將如何去測試它?現在,我基於當前的身份驗證用戶,但我將如何去注入一個虛假的身份驗證提供程序?你如何測試你的ASP MVC應用程序的基於用戶的安全性?
這可能是一個愚蠢的問題,但如果有人可以幫助我走出測試黑暗時代,那將是非常讚賞。
現在我已經寫了一段時間我的域對象的測試,但我還是不太清楚如何去測試安全在我的web項目。某些環境中的某些用戶可以訪問我的模型的某些屬性等,但是您將如何去測試它?現在,我基於當前的身份驗證用戶,但我將如何去注入一個虛假的身份驗證提供程序?你如何測試你的ASP MVC應用程序的基於用戶的安全性?
這可能是一個愚蠢的問題,但如果有人可以幫助我走出測試黑暗時代,那將是非常讚賞。
這種聯繫是一種方式,但它是更好的使用模擬:
Mock<ControllerContext> MockContext(string userName)
{
var mockContext = new Mock<ControllerContext>();
// mock an authenticated user
mockContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
mockContext.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true);
return mockContext;
}
[TestMethod]
public void DinnersController_Delete_Should_Fail_With_InvalidOwner_Given_Wrong_User()
{
//set by default
var mockContext = MockContext("scottha");
// mock an authenticated user
_dinnerController.ControllerContext = mockContext.Object;
ViewResult result = _dinnerController.Delete(1, "") as ViewResult;
Assert.AreEqual("InvalidOwner", result.ViewName);
}
如果使用TDD的測試應該只測試代碼有問題,其他所有關聯的對象應該是嘲笑/僞造
等等,你需要一個模擬的安全供應商,可以模擬你需要給用戶的情況下,測試(來賓,用戶1,用戶2,管理員等)
當你與當前MVC RC空白MVC項目你用模擬的安全提供者(會員/角色等)的基本測試框架。他們需要一些充實了,但給的基本設計
還有第三種選擇,那就是使用Xania.AspNet.Simulator
首先準備控制器動作
// arrange
var controllerAction = new AccountController().Action(c => c.ChangePassword())
.Authenticate(<username>, <roles>);
下次你有這取決於您的實現兩個選項,
第一個場景,如果你返回HttpUnauthorizedResult,使用授權屬性,或當你重寫你的控制器的AuthorizeCore,那麼你可以測試它像以下,在這種情況下,則不會調用實際的操作方法時,即。
// act, assert
controllerAction.Authorize().Should().BeNull();
第二種情況是當你真正驗證操作方法裏面的用戶:
// act
var result = controllerAction.Execute();
// assert
result.ActionResult.Should().NotBeOfType<HttpUnauthorizedResult>();
重複:http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership -provider not.that.dave.foley的解決方案將爲您工作。 – 2009-01-30 18:02:51