Возникли проблемы с модульным тестом ASP.NET MVC и HttpContext.Current.Cache - PullRequest
1 голос
/ 23 марта 2010

Вот первая часть кода моего контроллера:

public class ControlMController : Controller
    {
        IControlMService _controlMservice;

        public IList<User> Users
        {
            get
            {
                if (System.Web.HttpContext.Current.Cache["users"] == null)
                {

                    System.Web.HttpContext.Current.Cache["users"] = _controlMservice.GetUsers();
                }
                return (IList<User>)System.Web.HttpContext.Current.Cache["users"];
            }
        }

        public ControlMController(IControlMService controlMservice)
        {
            this._controlMservice = controlMservice;
            var users = Users;
            ViewData["Users"] = users;
            ViewData["jqSelectUsers"] = string.Join(";", users.Select(x => x.UserID + ":" + x.Name).ToArray());
        }

Я пытаюсь проверить это, и потому что я кеширую, используя HttpContext, я борюсь с исключениями нулевых ссылок. Я попробовал using MvcContrib.TestHelper; вот мой пример теста ...

    [TestMethod]
    public void EventDetails_Returns_view_with_correct_event()
    {
        var builder = new TestControllerBuilder();
        var controller = builder.CreateController<ControlMController>(
                                     new ControlMService(
                                           new MockControlMRepository()
                                                         ));
        var view = (controller.EventDetails(1) as ViewResult);
        Assert.AreEqual(1, (view.ViewData.Model as Event).EventId);
    }

(я не совсем успел использовать DI для моих тестов!)

Я все еще получаю то же исключение нулевой ссылки, когда код достигает httpcontext:

Error   1   TestCase 'SupportTool.Tests.Services.ControlM.ControlMControllerTests.EventDetails_Returns_view_with_correct_event'
failed: System.NullReferenceException: Object reference not set to an instance of an object.
   at SupportTool.web.Controllers.ControlMController.get_Users()

Есть идеи?

1 Ответ

4 голосов
/ 23 марта 2010

Я не думаю, что HttpRuntime.Cache будет нулевым при запуске ваших тестов.

...