2011-12-27 51 views
1

我正在通过本书的方式,亚当弗里曼和斯蒂芬桑德森(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论坛上,但没有得到任何回应。

+0

有你设法解决这个问题我有完全相同的问题。 – Paleta 2012-08-25 02:43:28

回答

1

我能解决这个问题,似乎我的测试项目中引用MVC 4而Web项目引用MVC 3,我所做的测试项目中引用MVC 3,现在它工作得很好

相关问题