Пересмешивание объектов при использовании MSTest - PullRequest
4 голосов
/ 10 марта 2009

Я только начинаю работать с MSTest (или, по крайней мере, с инструментами тестирования VS 2008, есть ли разница?)

Я хочу протестировать код, который использует объект сеанса. Очевидно, у меня нет HttpContext, и я не могу просто создать его, поэтому код завершается с ошибкой NullReferenceException.

Этот код просто не тестируется?

Ответы [ 4 ]

3 голосов
/ 10 марта 2009

Я не знаю, какой тип веб-проекта (MVC или WebForms) вы пытаетесь протестировать, но вы должны быть в состоянии макетировать класс HttpContextBase, используя вспомогательные средства Скотта Хансельмана , примеры которых Rhino.Mocks и Moq оба из которых являются бесплатными.

1 голос
/ 10 марта 2009

Я не знаю о непроверенных, но это, конечно, трудно проверить. Вы можете использовать typemock, он может создавать издевательства и заглушки практически всего. Но это не бесплатно.

Вы также можете попробовать обернуть вызовы к сеансам внутри отдельного объекта и скрыть их за интерфейсом. Затем вы можете добавить этот интерфейс в свой код. Для ваших тестов вы можете внедрить фиктивную реализацию. Это позволит достичь двух вещей: ваш код будет проще тестировать, и вы больше не будете привязаны к реализации сеанса в Asp.Net.

0 голосов
/ 21 июня 2014

В VS 2010, Microsoft Moles является опцией для насмешек.

В VS 2012, Microsoft Fakes - опция для насмешек.

0 голосов
/ 10 марта 2009

Какой уровень вовлеченности играет сессионный объект в логике, которую вы хотите проверить? Например, если это просто значение, которое использует asp.net, вы можете реализовать один из шаблонов представления , чтобы абстрагировать его (и упростить написание теста)

Например, приведенную ниже логику легко проверить, передав информацию о сеансе в реализацию представления

If UserObject.IsActive() Then
  _View.SessionActive = True
Else
  _View.SessionActive = False
End If
...