मैंने SO पर एक खोज की और ऐसा लगता है कि इस सवाल को अक्सर पूछताछ की जाती है। मैं mocks काम करने में सक्षम हो गया है और मैं बिना किसी मुद्दे के OnActionExecuted() निष्पादित करने में सक्षम हूं। मेरा यूनिट टेस्ट यहाँ है। टिप्पणी की गई पंक्तियां असफल होती हैं और मुझे यकीन है कि मैं सही प्रकार का मज़ाक उड़ा रहा हूं।यूनिट परीक्षण कार्य फ़िल्टर - ViewResult नकली कैसे करें
//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);
यहां मेरा एक्शन फ़िल्टर है।
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);
}
}
मुद्दा मैं यहाँ का सामना करना पड़ रहा हूँ filterContext.Result हमेशा EmptyResult के रूप में आता है। मैं इसके बजाय एक हाइड्रेटेड ViewResult में धक्का देना चाहता हूँ। कोई विचार है कि मैं इसे कैसे पूरा कर सकता हूं?
बहुत धन्यवाद!
मेरे क्रैपी कोड डारिन को दोबारा करने के लिए धन्यवाद। यह मेरे लिए काम किया। धन्यवाद फिर से :) – Praveen
कार्रवाई फ़िल्टर कन्स्ट्रक्टर में WrapperFactory इंजेक्शन के बारे में आपकी टिप्पणी मुझे उत्सुक बनाता है। WrapFilterAttribute सजावट के माध्यम से WrapperFactory के उदाहरण में आप कैसे भेजना चाहते हैं? AFAIK, विशेषताओं को संकलन-समय मान (स्थिरांक इत्यादि) की आवश्यकता होती है। – Praveen
@Praveen, यहां एक उदाहरण है कि कैसे प्राप्त करें [एक्शन फ़िल्टर के साथ कन्स्ट्रक्टर इंजेक्शन] (http://iridescence.no/post/Constructor-Injection-for-ASPNET-MVC-Action-Filters.aspx)। यह थोड़ा हैकी है लेकिन इस पल के लिए यही एकमात्र तरीका है। यह एएसपी.नेट एमवीसी 3. –