MVC3 ViewResult.ViewData错误:'无法找到对象实例的方法'
我正在通过本书的方式,亚当弗里曼和斯蒂芬桑德森(Apress)的临ASP.Net MVC3框架。在第8章结束时,我们创建了购物车应用程序和单元测试。这一点我没有问题,但现在单元测试失败了,原因我不明白。这本书的勘误没有提到这个问题。MVC3 ViewResult.ViewData错误:'无法找到对象实例的方法'
我正在使用Windows 7 64位,.Net 4,VS 2010 Ultimate。
一个ShippingDetails类的实例(送货地址等)和一个Cart类的实例(订购的物品)被传递给CartController的“Checkout”动作,它返回一个ViewResult。如果ModelState有效,则处理完成,购物车被清除并返回查看(“完成”)。如果ModelState无效,则返回View(shippingDetails)(shippingDetails是传入的参数)。
我们创建了一个单元测试,以确保空车无法检出。 CartController被实例化并且它的Checkout操作被调用,传递Cart和ShippingDetails的新实例,以便购物车中物品的计数为0.
从控制器的Checkout操作返回(在单元测试调试模式下)我能够将鼠标悬停在result.ViewData后面的代码中(“result”是返回的ViewResult)并查看“result.ViewData抛出了'System.ArgumentException'类型的异常。扩展信息,我看到“基础”和“消息”,“无法找到对象实例上的方法”。失败的单元测试的细节说:测试方法SportsStore.UnitTests.CartTests.Cannot_Checkout_Empty_Cart抛出异常:System.EntryPointNotFoundException:未找到入口点。
这里是CartController “结帐” 动作:
[HttpPost]
public ViewResult Checkout(Cart cart, ShippingDetails shippingDetails)
{
if (cart.Lines.Count() == 0) {
ModelState.AddModelError("Cart", "Sorry, your cart is empty!");
}
if (ModelState.IsValid) {
orderProcessor.ProcessOrder(cart, shippingDetails);
cart.Clear();
return View("Completed");
} else {
return View(shippingDetails);
}
}
下面是单元测试:
[TestMethod]
public void Cannot_Checkout_Empty_Cart()
{
// Arrange
Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
Cart cart = new Cart();
ShippingDetails shippingDetails = new ShippingDetails();
CartController target = new CartController(null, mock.Object);
// Act
ViewResult result = target.Checkout(cart, shippingDetails);
// Assert - check that the order hasn't been passed on to the processor
mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(), It.IsAny<ShippingDetails>()),
Times.Never());
// Assert - check that the method is returning the default view
Assert.AreEqual("", result.ViewName);
// Assert - check that we are passing an invalid model to the view
Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
}
您的帮助表示赞赏。请注意,这是以前发布在ASP.Net MVC论坛上,但没有得到任何回应。
我能解决这个问题,似乎我的测试项目中引用MVC 4而Web项目引用MVC 3,我所做的测试项目中引用MVC 3,现在它工作得很好
有你设法解决这个问题我有完全相同的问题。 – Paleta 2012-08-25 02:43:28