2008-11-17 9 views
5

ASP.NET MVC uygulamasında, bir kullanıcının gönderdiği bir iletiyi sildikten sonra sınamaya çalışıyorum. Bu sayfayı, yalnızca söz konusu öğenin sahibi tarafından yayınlanabilmesi için kısıtlamak istiyorum. Aslında, HttpContext.Current.User.Identity.Name öğenin sahibine eşit olup olmadığını kontrol eden denetleyicide hızlı bir denetim yapmak istedim, ancak bu birimi sınamanın zor olacağını çabucak anladım.User.Identity.Name ASP.NET MVC'de nasıl takılıyorsunuz?

Geçerli oturum açmış kullanıcı adına erişmenin bir yolunu sağlayan bir arabirim oluşturmalı mıyım?

cevap

4

Sorunuzun son satırı muhtemelen en hızlı çözüm, ancak, sana HttpContext.Current.User zaten IPrincipal ve HttpContext.Current.User.Identity zaten IIdentity olduğunu arayüz oluşturmak için gereken sanmıyorum.

çek mantığı bu arayüzleri ya kullanırsa

, kontrolör sen yardımcı HttpContext.Current.User.Identity

Umut yerine oluşturduğunuz bir IIdentity geçmek alay edilebilir!

2

Thread.CurrentPrincipal.Identity.Name kullanıyorum. Bir birim testi için bir GenericPrincipal yaratmak ve eklemek önemlidir.

5

Bu koda

Controller CreateControllerAs(string userName) { 

    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true); 

    var controller = new SomeController(); 
    controller.ControllerContext = mock.Object; 

    return controller; 
} 

O

+0

lib moq kullanır kullanabilirsiniz ben Mock sınıf bulabilirsiniz nerede biliyor musunuz? Bu konuyla ilgili belgeleri bulmaya çalışırken MSDN'e baktım, ancak herhangi bir ilerleme kaydetmedim. –

+1

https://code.google.com/p/moq/ bu kitap burada kullanılıyor – Sly