2017-01-27 4 views
0

Я следую подходу TDD для разработки моего веб-сайта MVC. У меня есть PaymentController, который будет иметь метод действия MakePayment который я тестирование с использованием метода испытания, как указано ниже:Действия контроллера блока тестирования, которые перенаправляются на другое действие

[TestMethod] 
public void MakePaymentLoad() 
{ 
    PaymentController payController = new PaymentController(); 
    ViewResult payResult = payController.MakePayment() as ViewResult; 
    Assert.IsNotNull(payResult); 
} 

[TestMethod] 
public void MakePaymentResult() 
{ 
    PaymentController payController = new PaymentController(); 
    Payment payment = new Payment { 
     BillerId = 1, 
     PayAmt = 1.0,     
     PayDt = DateTime.Now, 
     ConfCode = null, 
     BillAccount = "123", 
     PayStatus = 1, 
     FeeStatus = 1, 
     Platform =1 
    }; 
    ViewResult payResult = payController.MakePayment(payment) as ViewResult; 
    PaymentResult result = payResult.Model as PaymentResult; 
    Assert.IsNotNull(result.ConfCode);    
} 

В приведенных выше методов испытаний MakePaymentLoad только проверяет, является ли представление визуализируется и MakePaymentResult выселяется если код подтверждения присутствует в модели представления.

методов мое действие приведены ниже:

[HttpPost] 
public ActionResult MakePayment(Payment payment) 
{ 
    PaymentResult payResult = new PaymentResult { 
     ConfCode = "123" 
    }; 
    if (true) 
    { 
     TempData["ConfCode"] = "123"; 
     return RedirectToAction("Confirmation"); 
    } 
    return View(payment); 
} 

public ViewResult MakePayment() 
{    
    return View(); 
} 

public ActionResult Confirmation() 
{ 
    PaymentResult result = new PaymentResult { 
     ConfCode = Convert.ToString(TempData["ConfCode"]) 
    }; 
    return View(result); 
} 

The MakePaymentLoad проходов, как это проверить, только если вид оказывается тогда MakePaymentResult треском проваливается как результат метода действия является недействительным из-за использования RedirectToAcion внутри MakePayment's пост версия. Пожалуйста, дайте мне знать, как это исправить.

+0

is 'if (true)' намеренный? если он всегда туда пойдет, тогда нет необходимости в условном, а также в представлении – Nkosi

+0

Я следую подходу TDD. Изначально нам нужно сделать единичный тестовый чек с минимальным минимальным кодом. После этого код реорганизуется. –

+0

Я понимаю подход TDD. Но что вы хотите проверить. перенаправление вида? потому что действие всегда будет перенаправляться с текущим кодом. – Nkosi

ответ

2

вы должны проверить его, как следующий

var payResult = (RedirectToActionResult)payController.MakePayment(payment) 

Assert.AreEqual("Confirmation", action.RouteValues["action"]); 

Как вы возвращаете перенаправлять результат, вы не можете ожидать, модель взамен.

+0

Что делать, если я хочу проверить ConfCode? –

+1

ссылается на эту ссылку https://weblogs.asp.net/leftslipper/mvc-unit-testing-controller-actions-that-use-tempdata –

Смежные вопросы