RhinoMock против TypeMock против NUnit Mocking?

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

  • 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 frameworks, вы разработаете лучший код. TypeMock взрывает эти ограничения на куски. Насколько я знаю, в основном они используются людьми, которые пытаются получить код, который у них нет контроля над тестированием.

Ответ 4

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

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

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