0
私はこれで2時間以上を費やします...なぜこのテストがパスしているのか分かりません。私は..それは "Completed"ビューを返すべきではありませんが、テストでそれはしない!それは、 "string.Empty"と期待しているが、クレジットカードを渡すために "Completed"を返す。セキュリティコードはテスト中では全く "テスト"である必要がある。したがって、デフォルトのビュー(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;
}
}
あなたのモックオブジェクトは何ですか? –
まあ、MainCreditCardProcessorとEmailOrderSubmitterのインスタンスがあります。 – Rushino
の可能な複製[なぜこのテストユニットが合格するのですか?](http://stackoverflow.com/questions/4686814/why-is-this-test-unit-pass) – slebetman