SORU
9 HAZİRAN 2009, Salı


Nasıl ASP.NET MVC Denetleyicisi İsteği alay etmek için mi?

C bir kumanda var# ASP.NET MVC çerçeve kullanılması

public class HomeController:Controller{
  public ActionResult Index()
    {
      if (Request.IsAjaxRequest())
        { 
          //do some ajaxy stuff
        }
      return View("Index");
    }
}

Alay bazı ipuçları aldım ve aşağıdaki ve RhinoMocks ile kodu test etmeyi umuyordu

var mocks = new MockRepository();
var mockedhttpContext = mocks.DynamicMock<HttpContextBase>();
var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>();
SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest);

var controller = new HomeController();
controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller);
var result = controller.Index() as ViewResult;
Assert.AreEqual("About", result.ViewName);

Ancak bu hatayı almaya devam ediyorum:

Özel durum Sistem.ArgumentNullException: Sistem.ArgumentNullException : Değer boş olamaz. Parametre adı: isteği üzerine Sistem.Web.Mvc.AjaxRequestExtensions.(HttpRequestBase İsAjaxRequest istek)

Kumanda üzerinde Request nesne bu yana kurucu. Bu test aşağıda düzgün bir cevap önerilen kodunu kullanarak çalıştırmayı denedim.

Bu Adedi aynı testi için aşağıdaki kullandığım kullanarak RhinoMocks yerine ve Adedi:

var request = new Mock<HttpRequestBase>();
// Not working - IsAjaxRequest() is static extension method and cannot be mocked
// request.Setup(x => x.IsAjaxRequest()).Returns(true /* or false */);
// use this
request.SetupGet(x => x.Headers["X-Requested-With"]).Returns("XMLHttpRequest");

var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new HomeController(Repository, LoginInfoProvider);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
var result = controller.Index() as ViewResult;
Assert.AreEqual("About", result.ViewName);

ama aşağıdaki hata iletisini alabilirsiniz:

Özel Durum Sistemi.ArgumentException: Sistem.ArgumentException : Geçersiz olmayan geçersiz kılınabilir bir üyesi kurulum: x =>x.["X-İstenen-İle"] Adedi.başlıklarını Alay.(İfade ThrowİfCantOverride Kur, Methodınfo methodınfo)

Tekrar edemem başlık isteği ayarlanmış gibi görünüyor. Nasıl bu değer, RhinoMocks veya Adedi olarak ayarlarım?

CEVAP
9 HAZİRAN 2009, Salı


Moq kullanarak:

var request = new Mock<HttpRequestBase>();
// Not working - IsAjaxRequest() is static extension method and cannot be mocked
// request.Setup(x => x.IsAjaxRequest()).Returns(true /* or false */);
// use this
request.SetupGet(x => x.Headers).Returns(
    new System.Net.WebHeaderCollection {
        {"X-Requested-With", "XMLHttpRequest"}
    });

var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);

var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);

GÜNCELLEME:

Alay Request.Headers["X-Requested-With"] Request["X-Requested-With"] yerine Request.IsAjaxRequest().

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chickenby

    chickenby

    2 HAZİRAN 2008
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • Sergio Fernandez

    Sergio Ferna

    1 EKİM 2009