【发布时间】:2011-05-17 02:30:07
【问题描述】:
我正在尝试创建集成测试以确保我的视图中没有任何运行时错误。因此,我需要创建一个测试来检查ViewResult.ExecuteResult() 是否正常工作,但似乎我遇到了障碍。
我找到了this site,这给了我一个起点,我有以下代码:
[TestMethod]
public void RegisterResultExecutes()
{
//arrange
RequestContext requestContext = new RequestContext(new MockHttpContext(), new RouteData());
AccountController controller = new AccountController
{
FormsService = new MockFormsAuthenticationService(),
MembershipService = new MockMembershipService(),
Url = new UrlHelper(requestContext)
};
var result = controller.Register();
var sb = new StringBuilder();
Mock<HttpResponseBase> response = new Mock<HttpResponseBase>();
response.Setup(x => x.Write(It.IsAny<string>())).Callback<string>(y =>
{
sb.Append(y);
});
Mock<ControllerContext> controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(x => x.HttpContext.Response).Returns(response.Object);
//act
result.ExecuteResult(controllerContext.Object);
}
问题是当result.ExecuteResult() 被调用时,我得到以下异常
System.NullReferenceException: Object reference not set to an instance of an object.
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
MyApp.Tests.Controllers.AccountControllerTest.RegisterResultExecutes() in C:\Users\KallDrexx\Documents\Projects\MyApp\MyApp.Tests\Controllers\AccountControllerTests.cs: line 297
不幸的是,该堆栈跟踪不是很有用,因为我不确定它试图访问什么是空的。有人对我如何为ExecuteResult() 创建测试有任何建议吗?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 integration-testing