Я работаю над книгой Адама Фримена и Стивена Сандерсона (Apress) Pro ASP.Net MVC3 Framework.В конце главы 8 мы создали приложение для корзины покупок и модульные тесты.У меня не было проблем с этим, но сейчас модульное тестирование не проходит по причине, которую я не понимаю.Ошибки в книге не упоминаются об этой проблеме.
Я использую 64-разрядную версию Windows 7, .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 ».Расширяя информацию, я вижу для «base» и «Message» «Не удается найти метод на экземпляре объекта».В подробностях о неудачном модульном тесте говорится: Метод теста 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, но не получило ответа.