Пересмешивание зависимости контроллера от Moq с использованием specflow - PullRequest
1 голос
/ 26 января 2011

Я новичок в specflow и сомневаюсь, как издеваться над моим зависимости контроллера. Например, у меня есть класс UserController, который зависит от моего Класс UserRepository, который передается классу контроллера на его конструктор. Поэтому, используя Moq, я делаю что-то вроде этого:

var mock = new Mock<UserRepository>();
mock.Setup(m => m.ListAll()).Returns(new List<User>());
var browser = new IE(string.Format("http://localhost:4265/{0}",
username));

Но мой контроллер не использует смоделированный объект, как мне это сделать? что?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Вы смешиваете три (по крайней мере) тестовых фреймворка, что, конечно, круто, но вам, вероятно, следует остановиться и подумать, что именно вы хотите протестировать.

Ватин хорош для тестирования вашего пользовательского интерфейса, поскольку он контролируетэкземпляр браузера.Я считаю, что это хорошо для проведения регрессионных тестов http://en.wikipedia.org/wiki/Regression_testing

Specflow также хорош - лично мне нравится использовать его для сокращения разрыва между разработчиками бизнеса и (нами) разработчиками программного обеспечения, поскольку мы можем фактически определить требования с точки зрениямы оба понимаем (и, возможно, другие части организации), что я не хочу начинать пламенную войну, но это может создать больше проблем, чем решить, если вы не сосредоточитесь на ее реальных ценностях.Мы используем это на работе, тестируя сервисный уровень (на один уровень ниже контроллеров на уровне представления), и мы фактически только высмеиваем базу данных, внешние сервисы, файловую систему и т. Д., Что делает наши тесты потока процессов своего рода интеграционными тестами.

Moq - это фальшивый фреймворк, который можно использовать в любых тестах (например, я просто упускаю это из виду), но это отличный инструмент для модульного тестирования.

Итак, вернемся к вашемувопрос.Если вы хотите сделать один тест, чтобы найти все ваши ошибки, у вас проблемы;) Я знаю, что вы этого не хотите - это было просто глупое предложение, которое я сделал - но на самом деле, если вы просто хотите провести интеграционные тесты (тесты, запускаемые из пользовательского интерфейса через несколько уровней / зависимостей), вы можете легко смешивать различные среды тестирования, как сейчас, но тогда зачем издеваться над хранилищем пользователей?Это потому, что вы не хотите обращаться к базе данных?

В любом случае, один из способов сделать интеграционный тест, который вам кажется нужным, состоит в том, чтобы сконфигурировать ваше решение для использования макета - или, возможно, подойдет заглушка (создайте фальшивый пользовательский репозиторий, который возвращает данные, с которыми вы хотите протестировать) - вы должны использовать структуру зависимостей, такую ​​как Unity , Ninject или структурную карту (мальчик, давайте не будем начинать войну из-за того, какую платформу использовать) и иметьtest url Watin использует запуск вашего сайта с использованием конфигурации с репозиториями fake / mock.

С другой стороны, вы можете проводить модульное тестирование на своих контроллерах, сервисах и т. д. Возможно, вы даже захотите попробовать TDD но это совсем другая глава, которую я не могу здесь охватить!

0 голосов
/ 27 января 2011

Вы ничего не делаете с макетом, чтобы вставить его в свой контроллер.Для того, чтобы его можно было использовать, вашему контроллеру должен быть предоставлен репозиторий пользователя.

Также вам необходимо принять больше ответов.

...