Delphi тестирование при помощи подмен на Mock

May 21, 2015 14:25

Mock - это техника тестирования заменяет вызов к реальному объекту на вызов к подменному объекту, который возвращает нужные данные сразу. Это особенно актуально, когда нужно абстрагироваться от внешнего окружения. Т.е. вместо обращения к реальной БД при вызове сразу получаем заполненный DataSet.

Примеры использования
  1. Какую библиотеку Mock выбрать?
  2. Read more... )

mock, delphi, dsharp, тестирование, программирование, работа

Leave a comment

Comments 9

r3code May 27 2018, 07:40:12 UTC
Не стал я в это углубятся, поменял подход на код сам должен тестировать код без специальных Моков. Интерфейсы наше все!

Reply

ne_chervonec June 5 2018, 12:51:52 UTC
Интерфейсы конечно хорошо. Но по мере увеличения количества тестов становится довольно сложно их сопровождать.
Моки сопровождать не надо + они очень лёгковесные, что незаменимо при юнит-тестировании. Ведь юнит-тесты должны компилироваться и исполняться практически мгновенно :)

Самая живая из библиотек по-моему Delphi Mocks.

Ещё интересная штука - плагин TestInsight. Он хоть грубо, но имитирует работу MSTest в VisualStudio. Он позволяет автоматом запускать юнит-тесты когда работаешь в редакторе Delphi и сразу показывает результаты прогона.

Reply

r3code June 15 2018, 08:49:11 UTC
С какого количества? Несколько десятков, до 50 шт мне кажется это еще не много.
По моему когда есть интерфейс, заглушку через интерфейс запилить также просто как описать мок, только сторонние средства не нужно привлекать.
У меня для прогона тестов просто отдельный проект Dunit пишу код и его и гоняю. Плюс стоит прекоммит хук который из батника запускает весь тестовый набор и не дает зафиксировать изменения пока тесты падают.

Reply

ne_chervonec June 15 2018, 09:14:26 UTC
Количество тестов зависит от сложности проекта.
У меня в текущем проекте есть класс, на покрытие которого потребовалось как раз 50 тестов.
Интерфейсы хорошо использовать для простых стабов. Но тогда сложно проверять взаимодействие объектов между собой. Чем сложнее логика работы тестируемого класса, чем больше у него внешних зависимостей, тем более изощрённые фейковые объекты придётся писать для тестов.

Простой пример - чтение данных из потока.
В зависимости от формата данных в потоке может вызываться та или иная последовательность методов интерфейса-читателя. Соответственно, мок должен запоминать эту последовательность.
Если код тестируемого класса/интерфейса меняется, то придётся переписывать и мок-класс. Если код меняется часто, то затраты на поддержку тестов станут слишком большими.
Рано или поздно придётся написать свою библиотеку моков, чтобы абстрагироваться от конкретных "интерфейсов", используемых в тестах. Благо в последних версиях Delphi это относительно несложно сделать.

Reply


Leave a comment

Up