Мок Rhino против Typemock против JustMock против

Мне нужно выбрать фреймворк для нового проекта.

Каковы плюсы и минусы этих фреймворков? Любая сравнительная таблица?

Я знаю, что JustMock находится на стадии бета-тестирования, но сейчас он выглядит очень хорошо (очень похоже на TypeMock)

Изменить: я как насчет MS Mole?


person Adiel    schedule 14.04.2010    source источник
comment
Не забывайте о MoQ. Это мой любимый.   -  person    schedule 14.04.2010
comment
Moq - лучшее, что я использовал. Также продвигает хороший, чистый тестируемый код. stackoverflow.com/questions/64242/   -  person Finglas    schedule 14.04.2010
comment
Существует также FakeItEasy, который предоставляет естественные подделки / заглушки / моки, такие как Rhino, но с более чистым синтаксисом и улучшенным контекстным dsl для настройки. code.google.com/p/fakeiteasy   -  person Patrik Hägne    schedule 25.05.2010


Ответы (6)


До появления JustMock этот вопрос задавался, и ответы на него можно найти здесь. Есть очень хорошее сравнение фреймворков Mocking - в нем нет JustMock пока, но вы можете увидеть синтаксис и возможности каждой среды фиксации .NET.

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

Typemock Isolator использует профилировщик CLR для перехвата вызовов .NET и изменения их во время выполнения, а также может подделать практически все. Typemock также может подделывать объекты, к которым вы не можете «добраться» из теста, потому что они создаются внутри производственного кода. Некоторые называют это «черной магией», но другие считают, что возможность подделать практически все, включая сторонние библиотеки и устаревший код, является обязательной.

JustMock - новый проигрыватель, и сейчас он только в бета-версии - в нем есть часть Typemock Isolator и он может работать без профилировщика API - в этом режиме он похож на RhinoMocks. Еще предстоит выяснить, сколько возможностей Typemock Isolator он действительно имеет. Прямо сейчас кажется, что это хорошее начало в правильном направлении, но еще предстоит пройти некоторый путь, прежде чем он станет действительным вариантом.

person Dror Helper    schedule 14.04.2010
comment
Moq можно использовать для заглушек, подделок и объектов MOCK. - person Finglas; 14.04.2010
comment
Все фреймворки mocking могут это делать - вопрос в том, какие объекты - person Dror Helper; 14.04.2010
comment
JustMock и TypeMock поставляются с прикрепленным ценником, о котором стоит упомянуть. - person Johan; 15.01.2015

Недавно я перешел с RhinoMocks на Moq.

Оба имеют схожие возможности, но Moq имеет гораздо более чистый API.

person Pawel Lesnikowski    schedule 14.04.2010

[Заявление об ограничении ответственности - я работаю в Telerik]

Несколько слов о JustMock. Его API больше похож на API Moq, чем на API RhinoMocks, поэтому, если вы знакомы с Moq, у вас не должно возникнуть проблем с изучением JustMock. В JustMock мы постарались улучшить историю, например, при имитации последовательных вызовов. Кроме того, как уже упоминалось, JustMock позволяет имитировать статические классы и методы / свойства, запечатанные классы, невиртуальные методы и свойства и так далее, используя тот же синтаксис, подобный Moq. Также благодаря этому в JustMock можно делать частичные имитации.

Кстати, «черная магия», о которой упоминал Дрор, также возможна при использовании JustMock, если вы напрямую ссылаетесь на сборку Telerik.CodeWeaver.Hook, но, к сожалению, на данный момент это не задокументировано. Если кто-то захочет это сделать, он может открыть заявку в службу поддержки, и мы будем рады помочь.

Надеюсь это поможет.

person Hristo Kosev    schedule 14.04.2010

Также ознакомьтесь с Microsoft Moles, изоляционной структурой для .NET, которая позволяет заменить любую .NET с настраиваемым делегатом.

У Moles есть версия, которую можно использовать для коммерческих проектов, и она поддерживается в Visual Studio 2008 и 2010.

person João Angelo    schedule 14.04.2010
comment
это некрасиво кодировать и все основано на xml ... GROSS. - person PositiveGuy; 16.12.2013

См. Также: https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use/2608634#2608634

В настоящее время я занимаюсь модульным тестированием в Moq, и должен сказать, что он работает очень хорошо! - перефразирую: отлично работает! Я не использовал другие фреймворки для фиксации, которые вы упомянули, поэтому не могу дать вам сравнения. Но я могу сказать, что я рад, что выбрал Moq в качестве своего первого тестового фреймворка для создания макетов. Ламда-выражения действительно хороши, а также довольно легки и удобны для чтения (синтаксис записи / воспроизведения в большинстве других фреймворков имитирования на самом деле не улучшает вашу читаемость)

Помимо этого (и это немного не по теме) я буду использовать Ninject в ближайшем будущем в качестве контейнера IoC, и обе структуры идут рука об руку. У Ninject также есть Lamda, и он даже обеспечивает поддержку контейнеров с автоматическим имитированием для Moq (с использованием расширения). Так что, если вы также планируете использовать контейнер IoC, вы можете проверить эту замечательную комбинацию:]

person Bas    schedule 14.04.2010

Я не буду говорить вам, что лучше, потому что у каждого есть свои плюсы и минусы. Я всегда использовал Rhino Mocks, потому что это бесплатно, и вокруг большое сообщество, и мне легко найти любую помощь.

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

Я не знаю JustMock, поэтому не могу сказать вам, как это работает.

Я бы посоветовал вам попробовать их все и выбрать ту, с которой вам будет комфортно. Однако, если вам нужно протестировать устаревший код, выберите TypeMock.

Я надеюсь, что другие дадут вам более подробную информацию.

person Tomasz Jaskuλa    schedule 14.04.2010