Никогда не издевайся .. никогда! Решение довольно простое. Зачем подделывать такое прекрасное создание, как HttpContext
?
Нажмите сеанс вниз! (Этого достаточно для понимания большинства из нас, но подробно объяснено ниже)
(string)HttpContext.Current.Session["CustomerId"];
- вот как мы получаем к нему доступ сейчас. Измените это на
_customObject.SessionProperty("CustomerId")
При вызове из теста _customObject использует альтернативное хранилище (значение ключа БД или облака [http://www.kvstore.io/])
Но при вызове из реального приложения _customObject
использует Session
.
как это сделать? хорошо ... инъекция зависимости!
Таким образом, test может установить сеанс (в подполье) и затем вызвать метод приложения, как будто он ничего не знает о сеансе. Затем проверка тайно проверяет, правильно ли обновил код приложения сеанс. Или если приложение ведет себя на основе значения сеанса, установленного тестом.
На самом деле, мы в конце концов насмехались, хотя я сказал: "никогда не издевайся". Поскольку мы не могли не перейти к следующему правилу, «издевайтесь там, где болит меньше всего!». Насмешка над огромным HttpContext
или насмешка над крошечным сеансом, который причиняет меньше всего вреда? не спрашивайте меня, откуда пришли эти правила. Давайте просто скажем здравый смысл. Вот интересное прочтение о не насмешливом , поскольку юнит-тест может убить нас