2009-01-30 17 views
5

Ben süredir alanım nesneler için testler yazıyorum, ama yine de benim web projesinde güvenliği için test konuda nasıl emin değilim. Belirli ortamlardaki belirli kullanıcılar, modellerimin belirli özelliklerine vb. Erişebilir, ancak bunu test etmek için nasıl giderdiniz? Şu anda, geçerli kimliği doğrulanmış kullanıcıya dayanıyorum, ancak sahte bir kimlik doğrulama sağlayıcısı enjekte etmeye nasıl giderim?ASP MVC uygulamalarınızı kullanıcı tabanlı güvenlik için nasıl test ediyorsunuz?

Bu muhtemelen bir aptal soru ama kimse bana test karanlık çağların çıkmamıza yardım edebilir, eğer çok takdir edilecektir. TDD kullanarak testler yalnızca söz konusu kodunu test olursa

+0

Yinelenen: http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership aslında eylem yönteminin içine kullanıcıyı doğrulamak zaman

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

İkinci senaryodur -provider not.that.dave.foley çözümü sizin için çalışacaktır. –

+0

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

cevap

8

vermek, ama kullanmak daha güzel bir Mock:

bir üçüncü seçenek daha var
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

, diğer tüm bağlantılı nesneler size gerektiren kullanıcı davaları taklit bir sahte güvenlik sağlayıcı gerekir, diğerleri arasında

sahte/mocks olmalıdır testi (misafir, kullanıcı1, kullanıcı2, yönetici vs.)

Eğer sahte güvenlik sağlayıcıları (üyelik/roller vs.) ile bir temel test çerçevesi olsun şimdiki MVC RC ile boş bir MVC proje yapmak

. Bazı koymasıyla dışarı gerekir, ancak bağlantı TEK yoludur Yani temel tasarım

0

, o kullanıyor Xania.AspNet.Simulator

öncelikle, iki seçenek uygulamanıza bağlı olarak sahip denetleyici eylemini

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

sonraki hazırlamak

ilk senaryo, bir HttpUnauthorizedResult dönerseniz, yani Yetki özelliğini kullanarak ya da kumandanın AuthorizeCore geçersiz olduğunda, o zaman bu durumda gerçek eylem yöntemi çağrılır, aşağıdaki gibi test dururken.

// act 
var result = controllerAction.Execute(); 
// assert 
result.ActionResult.Should().NotBeOfType<HttpUnauthorizedResult>(); 
İlgili konular