测试我的MVC2控制器

时间:2011-05-05 14:39:45

标签: c# unit-testing asp.net-mvc-2 controller

[CompanyAuthorizationFilter]
    [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class TermSheetController : System.Web.Mvc.Controller
    {
        public ActionResult Notes(Guid? id, string notesText)
        {
            if (isModelValid(id))
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", notesText);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult SummaryInformation(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "SummaryInformation.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult ProductLegs(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "ProductLegs.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult AmortizationOptions(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "AmortizationOptions.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult Values(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "Values.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult Rates(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "Rates.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult RatesSpecific(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "RatesSpecific.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult AmortizationSchedule(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "AmortizationSchedule.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult SponsorInfo(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getBaseViewPath() + "SponsorInfo.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult BorrowerInfo(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getBaseViewPath() + "BorrowerInfo.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult SponsorContacts(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getBaseViewPath() + "SponsorContacts.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult CashFlows(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "CashFlows.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult PrePayment(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                if (string.IsNullOrEmpty(model.PrepaymentExport))
                {
                    return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Prepayment has not been calculated yet.");
                }
                else
                {
                    return Json(model.PrepaymentExport);
                }
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult FutureExposure(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                if (string.IsNullOrEmpty(model.ExposureExport))
                {
                    return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Potential Future Exposure has not been calculated yet.");
                }
                else
                {
                    return Json(model.ExposureExport);
                }
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult FutureExposureSpecific(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                if (string.IsNullOrEmpty(model.ExposureExport))
                {
                    return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Potential Future Exposure has not been calculated yet.");
                }
                else
                {
                    return Json(model.ExposureExport);
                }
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult History(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getBaseViewPath() + "History.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        public ActionResult ValuationHistoryGrid(Guid? id)
        {
            if (isModelValid(id))
            {
                ModelBase model = getModel(id.Value);
                return View(getSpecificViewPath(model) + "ValuationHistoryGrid.aspx", model);
            }
            else
            {
                return View(@"~\Views\Indications\ShowAStringPartial.aspx", "", "Structure is not in a valid state. Could not render Term Sheet View.");
            }
        }

        private bool isModelValid(Guid? id)
        {
            try
            {
                if (id.HasValue)
                {
                    IndicationBase indication = CachedTransactionManager<IndicationBase>.GetCachedTransactions(id.Value);
                    if (indication.Model == null)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        private ModelBase getModel(Guid id)
        {
            IndicationBase indication = CachedTransactionManager<IndicationBase>.GetCachedTransactions(id);
            return indication.Model;
        }

        private string getSpecificViewPath(ModelBase model)
        {
            var viewPath = "";
            if (model.GetType() == typeof(Chatham.Web.Models.Indications.SwapModel))
            {
                viewPath = @"~\Views\Indications\TermSheetViews\Swap\";
            }
            if (model.GetType() == typeof(Chatham.Web.Models.Indications.OptionModel))
            {
                viewPath = @"~\Views\Indications\TermSheetViews\Option\";
            }
            if (model.GetType() == typeof(Chatham.Web.Models.Indications.CollarModel))
            {
                viewPath = @"~\Views\Indications\TermSheetViews\Collar\";
            }
            if (model.GetType() == typeof(Chatham.Web.Models.Indications.CompoundSwapModel))
            {
                viewPath = @"~\Views\Indications\TermSheetViews\CompoundSwap\";
            }

            return viewPath;
        }

        private string getBaseViewPath()
        {
            return @"~\Views\Indications\TermSheetViews\";
        }
    }

因此,只需查看代码,您就可以知道它的作用。每个控制器动作引用一个不同的期望结果,我传入(大部分)Guid? id,我们正在使用id来调用private帮助器方法,获取model,并根据view返回特定的model

我甚至不知道从哪里开始对这个班级进行单元测试。我可以在这里得到一些帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,首先,您应该进行测试以确保传入的特定Guid会导致ViewResult具有正确的View位置集。 AKA

ActionResult action = _myControllerToTest.Notes(null, null);
Assert.IsNotNull(action);

ViewResult viewResult = action as ViewResult;
Assert.IsNotNull(viewResult);

// Check viewResult for correct view path and model data

从那里开始,并确保注入depdencies(特别是对于isModelValid()方法,因为它调用了CachedTransactionManager)