SORU
21 Mart 2009, CUMARTESİ


Birim testi ASP.Net MVC login sayfasına yönlendirme doğrulamak için İzin özniteliği

Bu muhtemelen sadece bir çift göze daha ihtiyacım olan bir durum olacak. Ben bir şey eksik olmalı, ama öyle değil, bu tür için test neden çözemedim bir türlü. Temelde ile Denetleyici [Yetki] işaretleyerek görünümü erişemiyor doğrulanmamış bir kullanıcı özniteliği emin olmak için çalışıyorum ve bunu kullanarak aşağıdaki kodu test etmeye çalışıyorum:

[Fact]
public void ShouldRedirectToLoginForUnauthenticatedUsers()
{
    var mockControllerContext = new Mock<ControllerContext>()
                         { DefaultValue = DefaultValue.Mock };
    var controller = new MyAdminController() 
              {ControllerContext = mockControllerContext.Object};
    mockControllerContext.Setup(c =>
               c.HttpContext.Request.IsAuthenticated).Returns(false);
    var result = controller.Index();
    Assert.IsAssignableFrom<RedirectResult>(result);
}

Bu RedirectResult arıyorum. bir çeşit göstergesi kullanıcı olmak için yeniden yönlendirilmiş oturum açma formu, ama yerine bir ViewResult her zaman döndü ve ne zaman hata ayıklama görebiliyorum Endeksi() yöntemi başarılı bir şekilde vurdu bile, kullanıcı kimliği doğrulanmış.

Yanlış bir şey mi yapıyorum? Yanlış düzeyde test? Bu tür bir şey için rota düzeyinde test edilmelidir.

[Yetki] özniteliği çalışıyor, sayfa döndürme, giriş ekranı gerçekten bana - ama nasıl bir test bu doğrularım? zorla çünkü biliyorum

Denetleyici ve indeks yöntemi davranışı doğrulamak ben çok basit sadece çok vardır. Bütünlüğü için onları ekledim:

[Authorize]
public class MyAdminController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

Herhangi bir yardım için teşekkür ederiz...

CEVAP
22 Mart 2009, Pazar


Yanlış düzeyde test ediyoruz. [Yetki] özniteliği sağlaryönlendirmemotoru asla yetkisiz bir kullanıcı için bu yöntemi çağırır - RedirectResult aslında denetleyicisi yöntemi güzergahtan değil, gelecek.

İyi haber - var zaten test kapsamı için bu bölümü MVC çerçeve kaynak kodu), bu yüzden bence hiç gerek yok, boş ver, sadece emin olun, kumanda yöntemi doğru şeyi yapmıyorne zamanadı da alır, ve çerçeve yanlış koşullarda aramak için değil, güven.

Eğer birim testleri öznitelik varlığını doğrulamak isterseniz, aşağıdaki gibi yansıma denetleyicisi yöntemlerini incelemek için kullanmanız gerekir. EDİT: Bu örnek, ChangePassword POST yöntemi özniteliği Yetki ve varlığı 'Yeni ASP.NET MVC 2 Projesi' o demo MVC2 ile yüklü. doğrular

[TestFixture]
public class AccountControllerTests {

    [Test]
    public void Verify_ChangePassword_Method_Is_Decorated_With_Authorize_Attribute() {
        var controller = new AccountController();
        var type = controller.GetType();
        var methodInfo = type.GetMethod("ChangePassword", new Type[] { typeof(ChangePasswordModel) });
        var attributes = methodInfo.GetCustomAttributes(typeof(AuthorizeAttribute), true);
        Assert.IsTrue(attributes.Any(), "No AuthorizeAttribute found on ChangePassword(ChangePasswordModel model) method");
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • ModNation Racers H.Q.

    ModNation Ra

    31 Ocak 2010