简体   繁体   English

测试我的 MVC2 Controller

[英]Test my MVC2 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\";
        }
    }

So just looking through the code you can probably tell what it does.因此,只需查看代码,您就可以知道它的作用。 Each controller action refers to a different desired result, and I'm passing in (for the most part), a Guid? id每个 controller 动作都指向不同的期望结果,我正在传递(大部分) Guid? id Guid? id , and we are using that id to call into the private helper methods, get the model , and return a specific view based on that model . Guid? id ,我们使用该id调用private辅助方法,获取model ,并返回基于该model的特定view

I really don't even know where to begin to unit test this class.我真的不知道从哪里开始对这个 class 进行单元测试。 Can I get some help here?我可以在这里得到一些帮助吗? Thanks!谢谢!

Well, to start with, you should test to make sure that a specific Guid passed in results in a ViewResult with the right View location set.好吧,首先,您应该测试以确保传入的特定 Guid 会生成具有正确视图位置集的 ViewResult。 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

Start there, and make sure to inject the depdencies (particularly for that isModelValid() method, since it calls out to CachedTransactionManager)从那里开始,并确保注入依赖项(特别是对于 isModelValid() 方法,因为它调用了 CachedTransactionManager)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM