2009-01-30 35 views
5

Tôi đã viết các bài kiểm tra cho các đối tượng miền của mình một thời gian, nhưng tôi vẫn không chắc chắn về cách kiểm tra bảo mật trong dự án web của tôi. Một số người dùng trong một số môi trường nhất định có thể truy cập các thuộc tính nhất định của các mô hình của tôi, nhưng bạn sẽ thử nghiệm như thế nào? Ngay bây giờ, tôi đang dựa trên người dùng được xác thực hiện tại, nhưng làm thế nào tôi sẽ đi tiêm một nhà cung cấp xác thực giả mạo?Làm cách nào để bạn kiểm tra ứng dụng ASP MVC của mình để bảo mật dựa trên người dùng?

Đây có lẽ là một câu hỏi ngớ ngẩn, nhưng nếu bất cứ ai có thể giúp tôi thoát khỏi thời kỳ tối tăm thử nghiệm, nó sẽ được nhiều đánh giá cao.

+0

trùng lặp: http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership -provider Giải pháp not.that.dave.foley sẽ hoạt động cho bạn. –

+0

http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership-provider – ajma

Trả lời

8

Đó liên kết là một cách, nhưng nó đẹp hơn để sử dụng một Mock:

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); 
    } 
0

Nếu sử dụng TDD xét nghiệm của bạn chỉ nên kiểm tra mã trong câu hỏi, tất cả các đối tượng có liên quan khác nên mocks/fakes

số những người khác, bạn sẽ cần một nhà cung cấp an ninh giả rằng có thể mô phỏng các trường hợp người dùng mà bạn yêu cầu để kiểm tra (guest, user1, user2, admin, vv)

Khi bạn tạo một dự án MVC trống với MVC RC hiện tại, bạn sẽ có được một khung kiểm thử cơ bản với các nhà cung cấp bảo mật giả lập (thành viên/vai trò, v.v.). Họ cần một số fleshing ra, nhưng cung cấp cho các thiết kế cơ sở

0

Có một lựa chọn thứ ba, đó là sử dụng Xania.AspNet.Simulator

đầu tiên chuẩn bị controller action

// arrange 
var controllerAction = new AccountController().Action(c => c.ChangePassword()) 
    .Authenticate(<username>, <roles>); 

tiếp theo bạn có hai lựa chọn tùy thuộc vào thực hiện của bạn,

trường hợp đầu tiên, nếu bạn trả về HttpUnauthorizedResult, tức là khi sử dụng thuộc tính Authorize hoặc khi bạn ghi đè AuthorizeCore của bộ điều khiển, bạn có thể kiểm tra nó như sau, trong trường hợp đó phương thức hành động thực tế không được gọi.

// act, assert 
controllerAction.Authorize().Should().BeNull(); 

kịch bản thứ hai là khi bạn thực sự xác nhận người sử dụng bên trong phương pháp hành động:

// act 
var result = controllerAction.Execute(); 
// assert 
result.ActionResult.Should().NotBeOfType<HttpUnauthorizedResult>(); 
Các vấn đề liên quan