我正在创建一个名为 JavaScriptViewResult
的非常简单的 ViewResult
子类,它在执行时调用基本实现,然后设置 Content-Type
> 对 text/javascript
的响应。在尝试对此类进行单元测试时,我在满足 ASP.NET MVC 堆栈的所有依赖项时遇到了一系列困难。
这是我使用 Rhino 的单元测试到目前为止的样子:
[TestMethod]
public void TestExecuteAction()
{
var request = MockRepository.GenerateMock<HttpRequestBase>();
request.Expect(m => m.Url).Return(new Uri("/Test/JavaScript", UriKind.Relative));
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
httpContext.Expect(m => m.Request).Return(request);
var controller = MockRepository.GenerateMock<ControllerBase>();
var virtualPathProvider = MockRepository.GenerateMock<VirtualPathProvider>();
var routeCollection = new RouteCollection(virtualPathProvider);
routeCollection.MapRoute("FakeRoute", "Test/JavaScript", new { controller = "Test", action = "JavaScript" });
var routeData = routeCollection.GetRouteData(httpContext);
var context = new ControllerContext(httpContext, routeData, controller);
var viewResult = new JavaScriptViewResult();
viewResult.ExecuteResult(context);
Assert.AreEqual("text/javascript", context.HttpContext.Response.ContentType);
}
运行测试时的最新异常是 System.Web.Routing.Route.GetRouteData(HttpContextBase httpContext)
内部深处的 NullReferenceException
。
如何设置执行 ViewResult
的所有依赖项?有什么技术可以让这个变得更简单吗?或者,是否有其他方法可以利用 MVC View 引擎生成 JavaScript,为响应设置正确的 Content-Type
?
最佳答案
我弄清楚了如何满足 ViewResult
的最低要求。我遇到的一个问题是 mock 寻找 View 的过程。通过确保填充对象的 View
属性可以避免这种情况。这是我的工作测试:
[TestMethod]
public void TestExecuteAction()
{
var response = MockRepository.GenerateStub<HttpResponseBase>();
response.Output = new StringWriter();
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
httpContext.Expect(m => m.Response).Return(response);
var routeData = new RouteData();
routeData.Values.Add("action", "FakeAction");
var context = new ControllerContext(httpContext, routeData, MockRepository.GenerateMock<ControllerBase>());
var viewResult = new JavaScriptViewResult();
viewResult.View = MockRepository.GenerateMock<IView>();
viewResult.ExecuteResult(context);
Assert.AreEqual("text/javascript", context.HttpContext.Response.ContentType);
}
关于c# - ASP.NET MVC 3 ViewResult 子类的单元测试依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661556/