“Срывание” пустых методов с Moq?

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

Мы сначала создали уровень абстракции, который позволил нам "слоту в" любом разумном соединении с базой данных (в нашем случае, мы просто поддерживали единственное соединение типа ODBC).

, Как только это существовало, мы тогда смогли сделать что-то вроде этого в нашем коде (мы работаем в C++, но я уверен, что Вы получаете идею):

GetDatabase ().ExecuteSQL ("нечто INSERT INTO (вздор, вздор)")

В нормальное время выполнения, GetDatabase () возвратил бы объект, который подал весь наш sql (включая запросы) через ODBC непосредственно к базе данных.

Мы тогда начали смотреть на базы данных в оперативной памяти - лучшее длинным путем, кажется, SQLite. ( http://www.sqlite.org/index.html ). Это удивительно просто настроить и использовать, и позволило нам подкласс и переопределение GetDatabase () для передачи sql базе данных в оперативной памяти, которая была создана и уничтожена для каждого выполненного теста.

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

В целом, помогло очень с нашим процессом TDD, начиная с создания, что кажется, что довольно безвредные изменения для исправления определенных ошибок могут иметь довольно странное влияние на другом (трудный обнаружить) области системы - из-за самой природы sql/databases.

, Очевидно, наши события центрировались вокруг среды разработки C++, однако я уверен, что Вы могли, возможно, получить что-то подобная работа под PHP/Python.

Hope это помогает.

30
задан womp 29 July 2009 в 23:33
поделиться

1 ответ

Если метод SaveItem () виртуальный или абстрактный, и вы не устанавливаете ] Callbase = true , тогда метод должен быть повторно реализован, чтобы ничего не делать с помощью макета.

Вы должны уметь:

mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).Verifiable();

...  test here ...

mockDb.Verify();
34
ответ дан 28 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: