Каковы возможности Moq и Rhino.mocks?

Я не могу найти конкретного сравнения функций Moq и Rhino. Все вопросы - «что вам больше нравится и почему» или «вот как вы делаете простой mock в rhino и как это делается в moq».

Я нигде не могу найти глубокого сравнения. Я знаю о различиях синтаксиса, я не ищу по этому поводу ответов. Я ищу сравнение возможностей. Например:

  • В Rhino есть Expect.On () для многопоточного издевательства. Может ли Moq это сделать?

  • А как насчет Multi-mocking (реализация нескольких интерфейсов с помощью одного mock). Может ли Moq это сделать?

  • Я считаю, что Moq теперь может издеваться над членами Protected. Может ли Rhino это сделать?

Изменить: в конце концов я посмотрел и на некоторые другие платформы .Net.


person womp    schedule 27.03.2009    source источник
comment
- Проверьте возможности moq здесь. - Отметьте здесь для функций Rhino Mocks   -  person rguerreiro    schedule 17.04.2009
comment
см. также stackoverflow.com/questions/642620/   -  person Ian Ringrose    schedule 23.07.2009


Ответы (5)


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

alt text

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

person womp    schedule 27.04.2009
comment
Немного обновил график. В ближайшее время в него может быть внесено несколько изменений, у меня есть еще несколько дополнительных позиций, которые могут быть добавлены. - person womp; 27.04.2009
comment
Привет, @womp, пожалуйста, перезагрузи диаграмму? Ссылка перенаправляет на какую-то японскую вывеску ;-) - person Dariusz Woźniak; 05.06.2017
comment
@ DariuszWoniak удивительно, что мне удалось найти его на древней резервной копии моего старого веб-сайта. Я перепечатал его :) Имейте в виду, конечно, что этому ответу уже 8 лет! - person womp; 07.06.2017
comment
Это очень полезная сравнительная таблица, но, поскольку она сделана 10 лет назад, она может быть устаревшей. Например: хотя я сам еще не использовал moq, кажется, что по крайней мере в некоторых случаях он поддерживает проверку порядка вызовов методов: см. stackoverflow.com/a/10609506/997940 и riptutorial.com/moq/example/23018/ - person Yoav Feuerstein; 29.04.2019

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

person rball    schedule 27.03.2009
comment
Я на самом деле считаю, что это одна из вещей, которые усложняют Rhino. Практически вся документация предназначена для старых синтаксисов, поэтому вы в конечном итоге смешиваете их при просмотре примеров, что приводит ко всевозможным странным ошибкам: / - person womp; 27.03.2009
comment
Согласен. Похоже, они пытались делать определенные вещи разными способами, не удаляя при этом старый способ. Полагаю, это для совместимости. Честно говоря, я намного лучше понимаю MoQ просто потому, что он не пытается различать Mock или Fake и не имеет фанкового синтаксиса. MoQ очень хорошо с этим - person rball; 28.03.2009

У Rhino есть GetArgumentsForCallsMadeOn (), который IMO упрощает проверку аргументов в некоторых случаях.

person user31934    schedule 11.04.2009

Для полноты замечу, что теперь NMock3 есть на CodePlex. Он имеет простой переход с NMock2, просто замените ссылку на NMock2.dll ссылкой на NMock3.dll. Это добавляет безопасность типов и поддержку рефакторинга.

person Bill W    schedule 20.01.2011

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

person Community    schedule 12.06.2009
comment
Что ограничено в проверке поведения в Moq? Я еще не столкнулся с какими-либо ограничениями. Он имеет Verify () и VerifyAll (), и вы можете сделать любой вызов Setup () проверяемым независимо от возвращаемого значения. - person womp; 16.06.2009