Что такое объект насмешливый и когда мне это нужно?

голоса
40

Многие люди используют фиктивные объекты , когда они пишут модульные тесты. Что такое фиктивный объект ? Почему бы мне когда - нибудь понадобится один? Нужно ли Mock Framework Object?

Задан 07/08/2008 в 03:37
источник пользователем
На других языках...                            


9 ответов

голоса
35

Объект Mocking используется для поддержания зависимости от вашего модульного тестирования. Иногда вы будете иметь тест, как «SelectPerson», который будет выбрать человека из базы данных и возврата объекта Person.

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

Ответил 07/08/2008 в 03:43
источник пользователем

голоса
16

Несколько человек уже ответили «что», но вот несколько быстрых «почему», что я могу думать:

  1. Представление

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

  2. сотрудничество

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

Ответил 07/08/2008 в 03:47
источник пользователем

голоса
12

Макет объекта позволяет протестировать только то, что вы пишете, и абстрактные детали, такие как доступ к ресурсу (диск, услуга сети, и т.д.). Затем макет позволяет притвориться, что внешний ресурс или класс или любой другой.

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

Практика покажет, когда издевается полезны и когда они не являются.

EDIT: Дразнящий ресурсов особенно важно, чтобы вы не должны полагаться на них, чтобы существовать во время теста, и вы можете издеваться детали того, как они существуют и что они отвечают (например, имитируя FileNotFoundException, или веб-сервиса, который отсутствует или различные возможные значения возвращаемых в WebService) ... все без времени медленный доступ участвующих (насмешливый докажут гораздо быстрее, чем доступ к таким ресурсам в тесте).

Ответил 07/08/2008 в 03:40
источник пользователем

голоса
9

Нужно ли Mock Framework Object?

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

Если вы только начиная с насмешками, прыгать прямо в рамки собирается по крайней мере в два раза вашей кривой обучения (вы можете удвоить кривой?). Mocking рамка будет делать гораздо больше смысла , когда вы провели несколько проектов , написания издевается вручную.

Ответил 07/08/2008 в 05:14
источник пользователем

голоса
6

Объект Mocking способ создать «виртуальный» или высмеивал объект из интерфейса, абстрактного класса или класса с виртуальными методами. Это позволяет рода обернуть один из них в своем собственном определении для целей тестирования. Это полезно для создания объекта, который полагался на протяжении определенного блока кода ваших тестируются.

Популярный один , который мне нравится использовать, называется Moq , но есть много других , как RhinoMock и многочисленные те , которые я не знаю , о.

Ответил 07/08/2008 в 03:40
источник пользователем

голоса
5

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

EDIT: Великий пример из википедии: Это позволяет проверить код заранее, как дизайнер автомобиль использует краш-тест манекен, чтобы проверить поведение автомобиля во время аварии.

Ответил 07/08/2008 в 03:38
источник пользователем

голоса
3

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

Ответил 07/08/2008 в 03:45
источник пользователем

голоса
1

Будьте или не вы насмешливые рамки полезно частично зависит от языка код, который вы пишете. При статическом языке, вам нужно поставить в дополнительных усилиях для того, чтобы обмануть компилятор в принятии ваших фиктивных объектов в качестве замены для реальной вещи. В динамически типизированных языках, такие как Python, Ruby или Javascript, вы можете вообще просто прикрепить методы на произвольный объект или класс и передать в качестве параметра - поэтому рамки добавили бы гораздо меньшее значение.

Ответил 07/08/2008 в 05:32
источник пользователем

голоса
0

2 рекомендуется насмешливые рамки для .net тестирования единицы являются Typemock Изолятор и Rhino Mock.

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

Ответил 15/10/2008 в 15:41
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more