2011-01-14 44 views
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; 
    } 
} 

+0

你的模拟对象是什么? – 2011-01-14 00:43:00

回答

0

实测值解决这个。 mocks对象没有任何实现。 (之前我应该​​知道的)

相关问题