0
我花了2個多小時在這...我無法弄清楚爲什麼這個測試是通過。我的意思是......它不應該返回視圖「已完成」,但在測試中它!它說預期的「string.Empty」,但是返回「完成」,但是要讓信用卡通過,安全代碼需要是「測試」,這在測試中根本就沒有。所以它應該返回默認視圖(就像view();)。這個測試單元爲什麼通過?
我在做什麼錯了?這是我的測試是錯誤的?或控制器邏輯?
非常感謝。
[Test]
public void Cannot_Check_Out_If_Credit_Card_Failed_To_Process()
{
var mockOrderSubmitter = new Mock<IOrderSubmitter>();
var mockCreditCardProcessor = new Mock<ICreditCardProcessor>();
// Arrange: Given a user has a non-empty cart
var cart = new Cart();
cart.AddItem(new Product(), 1);
// Arrange: ... but the credit card failed to process
var cartController = new CartController(null, mockOrderSubmitter.Object, mockCreditCardProcessor.Object);
var result = cartController.CheckOut(cart, new ShippingDetails(), new CreditCard() { SecurityCode = "123" });
// Assert
result.ShouldBeDefaultView();
}
[HttpPost]
public ActionResult CheckOut(Cart cart, ShippingDetails shippingDetails, CreditCard creditCard)
{
// Empty carts can't be checked out
if (cart.Lines.Count == 0)
ModelState.AddModelError("Cart", "Sorry, your cart is empty!");
// Everything is valid
if (ModelState.IsValid)
{
// Effectue le paiement.
TransactionResult result = creditcardProcessor.TakePayment(creditCard, cart.ComputeTotalValue());
if (result == TransactionResult.Success)
{
// Envoi la commande
orderSubmitter.SubmitOrder(cart, shippingDetails);
cart.Clear();
return View("Completed");
}
else
{
ModelState.AddModelError("CreditCard", "Sorry, we couldn't process your credit card, please verify your credit card details and retry.");
return View(new CheckOutViewModel());
}
}
else // Something was invalid
return View(new CheckOutViewModel());
}
public class MainCreditCardProcessor : ICreditCardProcessor
{
public TransactionResult TakePayment(CreditCard card, decimal amount)
{
if (card.SecurityCode == "test")
return TransactionResult.Success;
else
return TransactionResult.TransactionDeclined;
}
}
你的模擬對象是什麼? – 2011-01-14 00:43:00