2008-09-17 6 views
6

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

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

ответ

5

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

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

2

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

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

1

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

1

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

1

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

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

1

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

http://blog.davebouwman.net/CategoryView,category,Unit%2BTesting.aspx

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