Пересмешивание объектов при использовании MSTest

StackOverflow https://stackoverflow.com/questions/630712

  •  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 подделывает это опция для насмешек.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top