Широко ли используется объектное издевательство?

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

  •  01-07-2019
  •  | 
  •  

Вопрос

Мне любопытно, как многие из вас, ребята, включают издевательство над объектами (фреймворки, такие как JMock, NMock, RhinoMocks, рука об руку с фреймворками модульного тестирования) в свой ежедневный процесс разработки.Каков ваш опыт?

Видите ли, я разрабатываю поверх платформы ГИС (географических информационных систем), в которой большая часть работы связана с тем или иным способом обработки данных.Поскольку его объектная модель данных довольно сложна (множество классов и интерфейсов, все на основе COM), ее также довольно сложно и громоздко моделировать.В этом случае издевательство сопряжено с большими накладными расходами при написании наборов тестов.Интересно, есть ли люди в подобной ситуации, или просто, как насмешка (в какой бы ситуации вы ни находились) работает на вас.

Это было полезно?

Решение

В недавнем проекте, над которым я работал, мы широко использовали макетные объекты в нашем подходе к модульному тестированию.Проект был на 100% Java и среднего размера (около 100 000 строк некомментируемого кода).Это было настольное приложение на основе Swing, и единственным эффективным способом, который мы нашли для тестирования логики пользовательского интерфейса, был вариант дизайна на MVC, который позволял нам использовать макетные объекты для замены реальных классов пользовательского интерфейса Swing для автоматического тестирования.Мы также широко использовали mocking при тестировании нашего уровня доступа к данным (Hibernate / DAOs).

При использовании пользовательского интерфейса макеты были простыми в создании.А дизайн приложения (Fowler Passive View) легко встроен в mocks.Это не относилось к макетам, использованным при тестировании уровня доступа к данным.Но я могу сказать, что это явно стоило затраченных усилий.Фактически, большая часть "усилий" действительно была сосредоточена на создании повторно используемого решения, которое сводило бы к минимуму работу, которую разработчик должен был выполнять для создания каждого отдельного макета.Я бы рекомендовал потратить время на то, чтобы разобраться в вашей ситуации и найти подход, который позволит вам легко создать макет вашего уровня данных ГИС.Это - или просто вручную создать макет каждого класса.В любом случае, возможность запускать автоматизированные модульные тесты, основанные на mocks, имеет смысл...

Другие советы

В моей ситуации издевается над работой действительно мило. Но я использую Python, который настолько динамичен, что значительно упрощает многие вещи, связанные с тестированием.

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

Издевательство может быть полезно в каком-то проекте.Но иногда издевательство отнимает очень много времени, а рентабельность инвестиций от этого невелика.

Пытаясь протестировать Sharepoint, кажется, что издевательство - это единственный способ, и только типовой блок позволит вам издеваться над закрытыми классами.

В моем случае Издевательство используется очень широко.Mocks обычно предназначены для классов, которые имеют внешние зависимости, напримерсеть, база данных, файловая система.Любой из них может привести к появлению хлопьеватости в тестах, если не использовать mocks.

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

Существует инициатива, начатая Дейвом Боуманом, по попытке создать библиотеку Mocks сообщества для использования в модульном тестировании, связанном с ArcObjects.В его блоге и этом репозитории svn содержится отличная информация, связанная с модульным тестированием ГИС-систем

http://blog.davebouwman.net/CategoryView ,категория,Единица измерения%2BTesting.aspx

http://svn2.assembla.com/svn/arcdeveloper/TestingUtilities/trunk/

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