2011-12-27 65 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,現在它工作得很好

相關問題