MoQ, где запрос на HttpSessionStateBase - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь смоделировать HttpRequestBase и HttpSessionStateBase объекты и протестировать мой код с помощью Moq Framework.

Это важная часть моей настройки.

_httpSessionStateBase = _mockRepository.Create<HttpSessionStateBase>();
            _motorWebSession = new MotorWebSession
            {
                PersonaIdentifier = Guid.NewGuid(),
                NameIdentifier = Guid.NewGuid(),
                MiCurrentPageId = Guid.NewGuid(),
                MiSessionId = Guid.NewGuid(),
            };

            _httpSessionStateBase.SetupGet(e => e.Count).Returns(1);
            var keysCollection = new NameValueCollection { { "MotorSession", "MotorSession" } };
            _httpSessionStateBase.SetupGet(e => e.Keys).Returns(keysCollection.Keys);
            _httpSessionStateBase.Object[0] = _motorWebSession;
            _httpSessionStateBase.Object["MotorSession"] = _motorWebSession;

_httpContextBase = _mockRepository.Create<HttpContextBase>();
_httpContextBase.SetupGet(h => h.Session).Returns(_httpSessionStateBase.Object);

ВВ текущей реализации этот код вызывается в тесте.

var webSession = _httpContext.Current.Session;

var sessionObject = webSession.Keys.Cast<string>()
                    .Where(w => webSession[w] is WebSessionBase)
                    .Select(s => webSession[s])
                    .ToList().FirstOrDefault();

Во время предложения Where sessionObject приводит к null, что препятствует правильной работе любого другого последующего кода.Что-то не так с установкой?Или код может быть изменен, чтобы работать для этой установки?Он работал с Rhino.Mocks, но я пытаюсь изменить его на Moq.

1 Ответ

0 голосов
/ 22 октября 2018

Вместо _httpSessionStateBase.Object["MotorSession"] = _motorWebSession; звоните _httpSessionStateBase.Setup( s => s["MotorSession"]).Returns(_motorWebSession);.Moq-объекты не могут быть назначены напрямую даже через индекс с помощью оператора [].Правильный способ сделать это - выполнить настройку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...