SO üzerinde bir arama yaptım ve bu soruyu oldukça sık sorulana benziyor. Sahte çalışmayı başarabildim ve ayrıca herhangi bir sorun yaşamadan OnActionExecuted() yöntemini de çalıştırabiliyorum. İşte Birim Testim. Yorumlanan satırlar başarısız olanlardır ve eminim ki doğru türde alay etmiyorum.Birim Test Etme İşlemi Filtreleri - Nasıl Yapılır? Hata Düzeltme
//Arrange
//var viewResult = new ViewResult();
var filterContextMock = new Mock<ActionExecutedContext>();
var routeData = new RouteData();
var httpContextMock = new Mock<HttpContextBase>();
routeData.Values["data"] = "Mock data";
var requestContext = new RequestContext(httpContextMock.Object, routeData);
var controller = new FakeController();
controller.ControllerContext = new ControllerContext(requestContext, controller);
filterContextMock.Setup(f => f.RouteData).Returns(routeData);
filterContextMock.Setup(f => f.Controller).Returns(controller);
//filterContextMock.Setup(f => f.Result).Returns(viewResult);
//Act
var wrapFilterAttribute = new WrapFilterAttribute();
wrapFilterAttribute.OnActionExecuted(filterContextMock.Object);
İşte İşlem Filtrem.
public class WrapFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var view = (ViewResultBase)filterContext.Result;
if (view != null)
{
BaseViewModel viewModel = (BaseViewModel)view.ViewData.Model ?? new BaseViewModel();
viewModel.Wrap = new WrapperFactory().GetWrap();
}
base.OnActionExecuted(filterContext);
}
}
Buraya karşı karşıya olduğum sorun filterContext.Result her zaman EmptyResult olarak geliyor. Bunun yerine hidratlı bir ViewResult itmek istiyorum. Bunu nasıl başarabilirim?
Çok teşekkürler!
Benim berbat kodum Darin'i yeniden yazdığınız için teşekkürler. Bu benim için çalıştı. Tekrar teşekkürler :) – Praveen
WrapperFactory'nin eylem filtresi oluşturucuya enjekte edilmesi hakkındaki yorumunuz beni meraklandırıyor. WrapFilterAttribute dekorasyonu ile WrapperFactory örneğini göndermeyi nasıl başarırsınız? AFAIK, nitelikler derleme zamanı değerleri (sabitler vb.) Gerektirir. – Praveen
@Praveen, burada [eylem süzgeçleri ile kurucu enjeksiyonu] elde etmenin bir örneğidir (http://iridescence.no/post/Constructor-Injection-for-ASPNET-MVC-Action-Filters.aspx). Bu biraz hacky ama bu an için tek yol. Bu, ASP.NET MVC 3. –