RhinoMock против TypeMock против издевательств NUnit?

Я только начинаю заниматься тест-ориентированной разработкой, и мне интересно, какие основные различия существуют между RhinoMock, TypeMock и NUnit?

Любая информация будет глубоко цениться!

4 ответа

Решение

TypeMock является коммерческим продуктом (то есть вам придется платить за него), но он позволит вам макетировать конкретные объекты - в отличие от RhinoMocks/NUnit/MoQ, который может только макетировать интерфейс / абстрактный класс. То, как это достигается, является пограничной черной магией, но она делает некоторые очень умные вещи с CLR.

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

Насколько мне известно, кроме незначительных различий в синтаксисе, большинство фальшивых фреймворков отошли от старой модели записи / воспроизведения. Обычно вы настраиваете свои макеты, записывая ожидания с помощью интерфейса Fluent.

Лично я использовал только MoQ, и я <3 его.

Видео под названием " TDD - Понимание ложных объектов " Роя Ошерова очень помогает в изучении различий между различными библиотеками. Он не вдавался в подробности каждого аспекта, но достаточно, чтобы вы поняли. Надеюсь, это поможет. Рой также является главным архитектором TypeMock и очень влиятельной фигурой в области юнит-тестирования. Я не мог бы порекомендовать это видео для тех, кто хочет научиться использовать насмешки, а также узнать о доступных библиотеках.

Основное различие между TypeMock и библиотекой с открытым исходным кодом заключается в том, что TypeMock использует API-интерфейс Profiler, предоставленный Microsoft, вместо динамического прокси. Это позволяет TypeMock высмеивать конкретные классы и статические методы. Если вы не уверены, что такое профилировщик, это тот же API, который используется такими инструментами, как dotBrace JetBrain и профилировщики Ants .Net RedGate. TypeMock просто использует API по-другому, чтобы имитировать то, что вы ему говорите.

@RichardOD, спасибо за напоминание, его книга " Искусство модульного тестирования " раскрывается более подробно, а видео - нет. У меня есть книга, и она очень информативна.

  • Rhino.Mocks - это открытый исходный код, постоянно развивающийся и совершенствующийся фреймворк одного из самых плодовитых разработчиков отрасли. Это было вокруг некоторое время и, следовательно, поддерживает немало различных парадигм для насмешек. Поэтому учиться может быть немного сложнее в том смысле, что вы можете найти учебники по "старому" образу действий. Вот совет, SetUpResultFor () и Expect.Call() - это старые способы ведения дел. Новый способ - mockObject.AssertWasCalled ().

У меня не было никакого личного опыта с этими другими, но...

  • MOQ - это открытый исходный код, постоянно развивающийся и улучшающий фреймворк одного из менее продуктивных разработчиков отрасли (по сравнению с Ayende). Он более новый и поэтому не обладает некоторыми функциями, которые есть у Rhino.Mocks. Обычно это не проблема, поскольку в Rhino эти функции несколько устарели. Я слышал, что из-за этого учиться немного легче (кстати, не так-то легко выучить фальшивые рамки).
  • NUnit Mocks очень необычен в том, что касается насмешек. Он не поддерживает предпочитаемый в настоящее время синтаксис Arrange-Act-Assert, полагаясь вместо этого на Expect-Verify (запись / воспроизведение). Он также опирается на строки для определения имен методов и свойств вместо лямбда-выражений. Это делает его значительно устойчивым к рефакторингу. Это серьезная проблема. Я бы не рекомендовал это.
  • TypeMock Isolater - это хардкорный фальшивый фреймворк от компании (принадлежащей?) Роя Ошерова - парня, который знает свое тестирование, но также имеет некоторые слегка спорные мнения о том, как его применять. Это действительно интенсивно, насколько это возможно - перейти на низкий уровень и изменить работу объектов CLR. Однако философия, лежащая в основе TypeMock, на самом деле не на 100% TDD Часть преимуществ TDD заключается в том, что, принимая во внимание ограничения структур Mocking, вы будете создавать лучший код. TypeMock взрывает эти ограничения на кусочки. Насколько я знаю, он в основном используется людьми, которые пытаются получить код, который они не контролируют при тестировании.

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

Подделка классов SharePoint невозможна с RhinoMock, Moq, NUNit и т. Д., Поскольку (я считаю) им требуются интерфейсы для имитации объектов, а не возможность имитировать реальные конкретные классы.

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

Другие вопросы по тегам