Пересмешивание объектов при использовании MSTest
-
08-07-2019 - |
Вопрос
Я только начинаю работать с MSTest (или, по крайней мере, с инструментами тестирования VS 2008, есть ли разница?)
Я хочу протестировать код, который использует объект сеанса. Очевидно, у меня нет HttpContext, и я не могу просто создать его, поэтому код завершается ошибкой с NullReferenceException.
Этот код просто не тестируется?
Решение
Я не знаю, какой тип веб-проекта (MVC или WebForms) вы пытаетесь протестировать, но вы должны иметь возможность макетирует класс HttpContextBase с помощью помощников Скотта Хансельманса , в которых есть примеры в Rhino.Mocks и Moq оба из них бесплатны. р>
Другие советы
Я не знаю о непроверенных, но это, конечно, трудно проверить. Вы можете использовать typemock, он может создавать издевательства и заглушки практически всего. Но это не бесплатно.
Вы также можете попробовать обернуть вызовы к сеансам внутри отдельного объекта и скрыть их за интерфейсом. Затем вы можете добавить этот интерфейс в свой код. Для ваших тестов вы можете внедрить фиктивную реализацию. Это позволит достичь двух вещей: ваш код будет проще тестировать, и вы больше не будете привязаны к реализации сеанса в Asp.Net.
Какой уровень вовлеченности играет сессионный объект в логике, которую вы хотите проверить? Например, если это просто значение, которое использует asp.net, вы можете реализовать один из шаблоны представления , чтобы абстрагировать это (и упростить написание теста)
Например, приведенную ниже логику легко проверить, передав информацию о сеансе в реализацию представления
If UserObject.IsActive() Then
_View.SessionActive = True
Else
_View.SessionActive = False
End If
В VS 2010 Microsoft Moles - это вариант для насмешек. р>
В VS 2012 года Microsoft подделывает это опция для насмешек.